我鏈接到boost_program_options一個應用程序,它的CMakeLists.txt看起來像鏈接到與CMake和VS2010靜態加速lib中沒有自動連接
FIND_PACKAGE(Boost COMPONENTS program_options REQUIRED)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(${SUBPROJECT_NAME} ${Boost_LIBRARIES})
我在我的代碼使用#define BOOST_ALL_NO_LIB
包括<boost/program_options.hpp>
前禁用自動在vs2010中連接boost,因爲我想通過cmake指定它與linux兼容。
在Linux中,這段代碼編譯得很好(使用cmake,make和gcc)。 而在Windows與VS2010,我得到一個
2>App.obj : error LNK2001: unresolved external symbol "public: static unsigned int const boost::program_options::options_description::m_default_line_length" ([email protected][email protected][email protected]@@2IB)
2>App.obj : error LNK2001: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > boost::program_options::arg" ([email protected][email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@A)
注意,鏈接器找到的lib - 如果它沒有找到它,我會得到更多的無法解析的外部錯誤。
我跟蹤到以下問題: http://lists.boost.org/boost-users/2009/11/54015.php這很好地描述了正在發生什麼(這兩個是全局變量)。現在提出的解決方案是啓用動態鏈接並鏈接到DLL。但這不是我想要做的,我想鏈接到靜態提升庫(我實際上試圖做的,在鏈接器下VS的應用程序屬性 - >輸入它列出了D:\boost\boost_1_47\lib\boost_program_options-vc100-mt-gd-1_47.lib
。
我也嘗試添加
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
我的CMakeLists.txt,但它不會改變任何東西
任何想法如何解決這個問題
更新:? 當鏈接boost_program_options-VC100 -mt-SGD-1_4 7.lib,我得到了一大堆關於在boost-lib中已經定義的CRT符號的新鏈接器錯誤。 在按照panickal的建議更改VS運行時選項後,這些錯誤也消失了,它正在工作。
您是否在* find_package'調用之前添加了3個'set'調用? – Fraser
當然可以。問題已解決,因爲無論如何:-) – Ela782