2017-12-01 11 views
0

CMakeを使用してlibtwitcurl.so.1という名前の.soファイルをリンクしようとしています。私のcmakeのファイルは、次のようになります。CMakeを使用しているMacOSで.soライブラリをリンクする際にエラーが発生しました

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) 

しかし、私はこのエラーを得続ける:

[ 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 

を、それは共有ライブラリを見つけることができないいくつかの理由。私は使用しようとしました:

g++ main.cpp libraries/libtwitcurl.so.1 

これはうまくいきます。しかし、私はCLakeのCMakeで動作させることはできません。

答えて

0

絶対パスをtarget_link_librariesに渡す必要があります。公式documentationで推奨されているように代わりlink_directoriesの 利用find_library

find_library(TWIT_CURL_LIBRARY twitcurl ${CMAKE_SOURCE_DIR}/libraries) 
target_link_libraries(MarkoTweeter ${TWIT_CURL_LIBRARY}) 
:あなたのケースのための find_library

簡単な使い方は以下のようになり

Note that this command is rarely necessary. Library locations returned by find_package() and find_library() are absolute paths. Pass these absolute library file paths directly to the target_link_libraries() command. CMake will ensure the linker finds them.

関連する問題