首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >找不到CMake库

找不到CMake库
EN

Stack Overflow用户
提问于 2017-12-07 16:38:45
回答 2查看 11.7K关注 0票数 1

我尝试运行使用cmake生成的makefile。它会生成一个错误

代码语言:javascript
复制
ld: library not found for -lhello
clang: error: linker command failed with exit code 1 (use -v to see invocation)

文件目录为:

cmakelists.txt为:

main.c文件是:

错误:

我想我设置的目录是对的。如何解决这个错误?

EN

回答 2

Stack Overflow用户

发布于 2017-12-07 17:28:36

如果你想链接库,CMake有一个系统。对于许多标准库,我们都有cmake模块,允许您使用find_package命令。这将为包含目录和库设置一些变量。如果您的库没有这样的东西,您可以使用find_path来查找包含文件,使用find_library来搜索库。

这是你可以做的(未经测试,就从我的脑海中消失):

代码语言:javascript
复制
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目标。

票数 2
EN

Stack Overflow用户

发布于 2021-10-16 19:17:25

如果你的库不在像/usr/lib这样的标准路径中,你应该在你的CMakeLists.txt中使用link_directories()来指定一个包含你的库的非标准库路径。请注意,您必须将link_directories()放在add_executable()之前,如下所示:

代码语言:javascript
复制
link_directories(../../lib)
add_executable(newhello main.c)
include_directories(../../include)
target_link_libraries(newhello hello)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47690827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档