2017-08-12 102 views
1

這簡化版,幫助是我的CMakeLists.txt:-lboost_system未定義參考`的boost ::系統:: system_category()」上的cygwin

set(CMAKE_VERBOSE_MAKEFILE ON) 
cmake_minimum_required(VERSION 3.8) 
project(spider) 
set(CMAKE_CXX_STANDARD 11) 
set(SOURCE_FILES main.cpp) 
set(THREADS_PREFER_PTHREAD_FLAG ON) 
find_package(Threads REQUIRED) 
add_executable(spider ${SOURCE_FILES}) 
target_link_libraries(spider ${Boost_LIBRARIES}) 
target_link_libraries(spider Threads::Threads) 
target_link_libraries(spider 
     ${Boost_PROGRAM_OPTIONS_LIBRARIES} 
     ${Boost_FILESYSTEM_LIBRARIES} 
     ${Boost_SYSTEM_LIBRARIES} 
     ) 
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lboost_system -DBOOST_SYSTEM_NO_DEPRECATED") 

這是我的包括來自的main.cpp文件:我試圖下載和建設提升,它導致噸的trobules,所以我決定使用與cygwin安裝程序一起提供的提升。我有boost_system和我/ include文件夾提高,所以我沒有設置升壓在我的CMakeLists.txt:

enter image description here

的問題是如何處理的錯誤做:

/usr/include/boost/system/error_code.hpp:322: undefined reference to `boost::system::system_category()'

正如你所看到的,我已經試過-lboost_system-DBOOST_SYSTEM_NO_DEPRECATED,標誌傳遞到g ++:

/usr/bin/c++.exe -lboost_system -DBOOST_SYSTEM_NO_DEPRECATED -g -Wl,--enable-auto-import CMakeFiles/spider.dir/main.cpp.o -o spider.exe -Wl,--out-implib,libspider.dll.a -Wl,--major-image-version,0,--minor-image-version,0

但這沒有幫助。有任何想法嗎 ?

+0

您的鏈接順序錯誤。 -lboost_system必須在你的目標文件之後。我不知道如何調整你的CMakefile來解決這個問題。 –

+0

請勿手動添加target_link_libraries,請使用FindBoost.cmake提供的變量。 – usr1234567

回答

0

加入

target_link_libraries(spider boost_system) 

代替SET CMAKE_CXX_FLAGS到cmake的文件的末尾可以解決問題,根本原因在於,該標記應在結束時,作爲評論者注意到。