首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.so链接macOS中的CMake库时出错

使用.so链接macOS中的CMake库时出错
EN

Stack Overflow用户
提问于 2017-12-01 00:52:59
回答 1查看 318关注 0票数 0

我试图使用.so链接名为libtwitcurl.so.1的CMake文件。我的Cmake文件如下所示:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.8)
project(MarkoTweeter)

set(CMAKE_CXX_STANDARD 14)

set(SOURCE_FILES main.cpp markov/markov_chain.cpp markov/markov_chain.h libraries libraries/curl)
include_directories(${CMAKE_SOURCE_DIR}/inc)
link_directories(${CMAKE_SOURCE_DIR}/libraries)
add_executable(MarkoTweeter ${SOURCE_FILES} markov/markov_chain.cpp    
markov/markov_chain.h)
target_link_libraries(MarkoTweeter twitcurl)

但是我不断地发现这个错误:

代码语言:javascript
复制
[ 33%] Linking CXX executable MarkoTweeter
ld: library not found for -ltwitcurl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [MarkoTweeter] Error 1
make[2]: *** [CMakeFiles/MarkoTweeter.dir/all] Error 2
make[1]: *** [CMakeFiles/MarkoTweeter.dir/rule] Error 2
make: *** [MarkoTweeter] Error 2

由于某些原因,它找不到共享库。我试过使用:

代码语言:javascript
复制
g++ main.cpp libraries/libtwitcurl.so.1

效果很好。但我似乎无法让它与CMake在CLion上一起工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-01 01:20:31

您需要传递到target_link_libraries的绝对路径。使用find_library而不是官方文档中推荐的link_directories

注意,这个命令很少是必需的。find_package()和find_library()返回的库位置是绝对路径。将这些绝对库文件路径直接传递给target_link_libraries()命令。CMake将确保链接器找到它们。

对于您的情况,find_library的简单用法将是:

代码语言:javascript
复制
find_library(TWIT_CURL_LIBRARY twitcurl ${CMAKE_SOURCE_DIR}/libraries)
target_link_libraries(MarkoTweeter ${TWIT_CURL_LIBRARY})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47585043

复制
相关文章

相似问题

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