我尝试运行使用cmake生成的makefile。它会生成一个错误
ld: library not found for -lhello
clang: error: linker command failed with exit code 1 (use -v to see invocation)
文件目录为:
cmakelists.txt为:
main.c文件是:
错误:
我想我设置的目录是对的。如何解决这个错误?
发布于 2017-12-07 17:28:36
如果你想链接库,CMake有一个系统。对于许多标准库,我们都有cmake模块,允许您使用find_package命令。这将为包含目录和库设置一些变量。如果您的库没有这样的东西,您可以使用find_path来查找包含文件,使用find_library来搜索库。
这是你可以做的(未经测试,就从我的脑海中消失):
add_executable(main main.c)
target_include_directories(
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
PUBLIC ${CMAKE_SOURCE_DIR}/include/hello
)
find_library (
HELLO_LIB
NAMES hello libhello # what to look for
HINTS "${CMAKE_SOURCE_DIR}/lib" # where to look
NO_DEFAULT_PATH # do not search system default paths
)
# check if we found the library
message(STATUS "HELLO_LIB: [${HELLO_LIB}]")
if (NOT HELLO_LIB)
message(SEND_ERROR "Did not find lib hello")
endif
target_link_libraries(main
${HELLO_LIB}
)
使用message
调试您的cmake文件。如果您也在cmake中定义库,则可以直接链接到cmake目标。
发布于 2021-10-16 19:17:25
如果你的库不在像/usr/lib
这样的标准路径中,你应该在你的CMakeLists.txt
中使用link_directories()
来指定一个包含你的库的非标准库路径。请注意,您必须将link_directories()
放在add_executable()
之前,如下所示:
link_directories(../../lib)
add_executable(newhello main.c)
include_directories(../../include)
target_link_libraries(newhello hello)
https://stackoverflow.com/questions/47690827
复制相似问题