2013-04-04 75 views
3

我有一個C++項目,使用CMake和Boost在Linux下編譯/鏈接,沒有任何問題。我正在努力通過的Visual C這個移植到Windows 2012 ++Visual C++ 11無法在CMake生成的項目中找到Boost unit_test_framework庫

我的CMake的配置如下:

set(BOOST_ROOT ${DEPENDENCY_DIR}/boost/) 
set(Boost_USE_STATIC_LIBS ON) 
set(Boost_USE_MULTITHREADED ON) 
set(Boost_USE_STATIC_RUNTIME OFF) 
find_package(Boost 1.53 COMPONENTS system date_time chrono serialization filesystem program_options random thread regex unit_test_framework) 

message(STATUS "Boost Version:" ${Boost_VERSION}) 
message(STATUS "Boost Include Dirs:" ${Boost_INCLUDE_DIR}) 
message(STATUS "Boost Libraries:") 
foreach(lib ${Boost_LIBRARIES}) 
     message(STATUS ${lib}) 
endforeach() 

include_directories(${Boost_INCLUDE_DIR}) 

,我使用target_link_libraries與我的目標${Boost_LIBRARIES}。在message之上的命令也顯示所有找到的文件沒有任何問題。

此外,所需庫顯示libboost_unit_test_framework-vc110-mt-gd-1_53.lib應該是。

screenshot of library dependencies

然而,當我建立的目標之一,我得到

2>LINK : fatal error LNK1104: cannot open file 'boost_unit_test_framework-vc110-mt-gd-1_53.lib' 

我刪除了另一個Boost庫,並從錯誤中似乎鏈接器能夠找到別人。 (如chronoserialization。)但是,錯誤消息有點不同。文件名前有lib

2>LINK : fatal error LNK1104: cannot open file 'libboost_serialization-vc110-mt-gd-1_53.lib' 

爲什麼VC++查找與升壓前綴一個文件,而不是libboost爲unit_test_framework?

+0

您是否試過'add_definitions(-DBOOST_ALL_NO_LIB)'來禁用[boost的自動鏈接功能](http://www.boost.org/doc/libs/release/libs/config/doc/html/boost_config /boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code) – Fraser 2013-04-04 19:43:43

回答

0

好吧,檢查兩件事情:

  • 確保文件實際上是在給定的路徑存在,並且您已經閱讀權限。
  • 確保您使用32位.LIB用於32位版本,而64位.LIB用於64位LIB。
+0

我檢查了這兩個。順便說一句,當我刪除特定的unit_test_framework依賴項時,它會編譯不依賴於此特定庫的目標。 – 2013-04-04 17:26:30

相關問題