在 /usr/local/lib 下找不到库
cannot find library under /usr/local/lib
当我使用 CMakeList 时.txt与:
find_library(cryptoppV libcryptopp.a)
target_link_libraries(${PROJenter code hereECT_NAME} ${cryptoppV})
然后我可以在/usr/local/lib 下找到一个库,并使C++程序正确并获得正确的结果。
但是当我将其替换为:
-- find_library(cryptoppV libcryptopp.a)
target_link_libraries(${PROJECT_NAME} cryptopp)
然后我收到错误消息:
ld: library not found for -lcryptopp
为什么 cmake 默认不链接/usr/local/lib? 我做错了什么吗?
--由爱劲松添加 2018年10月7日 上午6点37分
我更困惑了。 当CMakeLists.txt是:
set(SOURCE_FILES main.cpp)
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
find_package(Boost 1.58 REQUIRED thread)
target_link_libraries(${PROJECT_NAME} Boost::thread)
find_library(cryptoppV libcryptopp.a)
target_link_libraries(${PROJECT_NAME} ${cryptoppV})
编译器可以找到cryptopp/sha.h.但是当CMakeLists.txt是:
set(SOURCE_FILES main.cpp)
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
## find_package(Boost 1.58 REQUIRED thread)
## target_link_libraries(${PROJECT_NAME} Boost::thread)
find_library(cryptoppV libcryptopp.a)
target_link_libraries(${PROJECT_NAME} ${cryptoppV})
错误消息是:
fatal error: 'cryptopp/sha.h' file not found
#include <cryptopp/sha.h>
当CMakeLists.txt是:
set(SOURCE_FILES main.cpp)
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
find_package(Boost 1.58 REQUIRED thread)
## target_link_libraries(${PROJECT_NAME} Boost::thread)
find_library(cryptoppV libcryptopp.a)
target_link_libraries(${PROJECT_NAME} ${cryptoppV})
错误消息仍然是:
fatal error: 'cryptopp/sha.h' file not found
#include <cryptopp/sha.h>
为什么我使用CMAKE要求我与库Boost::thread链接的Cryptopp? 我更困惑了。
--由爱金松添加 2018年10月7日 上午11:56
如果我使用g++ main.cpp -o main -lcryptopp
,我可以得到正确的结果。这说明库 cryptopp 已经正确安装,g++ 可以找到库。为什么当我通过制作时,它找不到库?
--为卡米尔库克启动添加
--由 aijinsong 在 Oct 7, 2018 3:27 PM 添加
当我通过使 VERBOSE=1 制作它时,我收到以下消息:
cd /Users/aijinsong/Documents/projects/com.aijs.cxx/bolochain/src && /usr/local/Cellar/cmake/3.12.3/bin/cmake -E cmake_link_script CMakeFiles/bolochain.dir/link.txt --verbose=1
链接.txt中的文本是:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/bolochain.dir/main.cpp.o -o bolochain /usr/local/lib/libboost_thread-mt.dylib -lcryptopp /usr/local/lib/libboost_chrono-mt.dylib /usr/local/lib/libboost_system-mt.dylib /usr/local/lib/libboost_date_time-mt.dylib /usr/local/lib/libboost_atomic-mt.dylib
此命令会导致链接失败,但是当我像下面这样编辑它时,C ++链接命令处理得很好:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -g -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/bolochain.dir/main.cpp.o -o bolochain /usr/local/lib/libboost_thread-mt.dylib -lcryptopp /usr/local/lib/libboost_chrono-mt.dylib /usr/local/lib/libboost_system-mt.dylib /usr/local/lib/libboost_date_time-mt.dylib /usr/local/lib/libboost_atomic-mt.dylib
只需删除:-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
我还在研究这个问题。
--为卡米尔库克端添加
拳头,谢谢@Kamil Cuk。参数 -VERBOSE=1 非常有用,我可以获得更详细的消息,向我展示使用 make 时会发生什么。
关键是当我在OSX系统下使用cmake时。它将生成一个名为"link.txt"的 txt,其中包括命令,其中一部分如下所示:-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
当我删除这部分时,命令将正确执行。 但是当我添加此行时,命令执行错误。 所以关键是这一行可能限制了 C++ 的搜索路径。谢谢@tsyvarev.你是对的,-isysroot
限制了 c++ 链接器搜索/usr/local/lib
。
其次,我没有找到如何删除OSX cmake生成的行-isysroot ...
。所以,我需要找到另一种解决方案。
当我搜索有关 find_package/include_directories/target_link_libraries 的更多信息时,我发现find_package需要一个 FindXXX.cmake 文件来帮助它找出目标的头文件和库。所以我用谷歌搜索了一个FindCyptoPP.cmake文件。在这个文件中,它找出Tow vars,一个保存Cryptopp的头目录路径的值,一个保存Cryptopp的库路径的值。然后我使用include_directories/target_link_libraries如下,问题 战争解决了。
find_package(CryptoPP)
include_directories(${CRYPTOPP_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${CRYPTOPP_LIBRARIES})
然后当我使用make -VERBOSE = 1
时,我喜欢当我使用 CMakeList 时输出略有不同.txt如下所示:
target_link_libraries(${PROJECT_NAME} cryptopp)
当我使用三行时,输出包含一行/usr/local/lib/libcryptopp.dylib
。当我使用一行时,输出包含一行-lcryptopp
。
所以,使用命令行-isysroot
,命令行-lcryptopp
会在-isysroot
定义的目录下搜索库,而在目录下,没有名为cryptopp
的库,而是在/usr/local/lib
下。但是使用命令行/usr/local/lib/libcryptopp.dylib
,它给出了库的绝对路径,因此链接只需执行链接任务,而无需搜索。再次感谢@Kamil库克。
第三,我知道include_directories/target_link_libraries是两个独立的步骤,一个用于包含头文件,一个用于链接库。
尽管如此,还是有一些问题没有解决: - 如何删除 -isysroot? - 如何创建一个FindXXX.cmake文件? - 如何使/usr/local/lib
成为默认搜索目录,这是一种练习方法吗?
我会继续研究它们,几天或几周后再回来。
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 找不到QtResource文件中的文件
- VC++本机单元测试,找不到调试符号
- RegGetValue在当前用户下找不到名称
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- c++找不到具有相同哈希的无序集合元素
- 找不到以下加速库:boost_fiber
- 找不到 FLTK(缺少:FLTK_INCLUDE_DIR)
- 设置 Visual Studio for MPI: 找不到标识符错误
- 在 /usr/local/lib 下找不到库
- pip install uwsgi 失败,出现 /usr/local/include/string/string.h:7:10:致命错误:找不到'sstream'文件?
- XCode 找不到 zmq.h,即使它位于 /usr/local/include 和标头搜索路径中
- /usr/local/include/tk.h:71:13:致命错误:安装 Python 库时找不到'X11/Xlib.h'文件
- Xcode 6.0.1版gmp.h头文件找不到,尽管gmp.h和gmpxx.h在local/include中
- Linux g++编译错误:/usr/bin/ld:找不到-l/usr/local/include
- 在/usr/local/lib中找不到库