2017-12-01 4 views
0

Ich versuche, eine .so-Datei, die libtwitcurl.so.1 heißt, mit CMake zu verknüpfen. Meine Cmake Datei sieht wie folgt aus:Fehler beim Verknüpfen einer .so-Bibliothek in MacOS mit CMake

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) 

Aber ich erhalte immer diese Fehlermeldung:

[ 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 

Aus irgendeinem Grund ist es nicht die gemeinsame Bibliothek finden. Ich habe versucht mit:

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

Was funktioniert gut. Aber ich kann nicht scheinen, dass es mit CMake in CLion funktioniert.

Antwort

0

Sie müssen den absoluten Pfad an target_link_libraries übergeben. Verwenden find_library statt link_directories wie in der offiziellen documentation empfohlen:

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.

Einfache Nutzung von find_library für Ihren Fall wäre:

find_library(TWIT_CURL_LIBRARY twitcurl ${CMAKE_SOURCE_DIR}/libraries) 
target_link_libraries(MarkoTweeter ${TWIT_CURL_LIBRARY}) 
Verwandte Themen