3

我有一个使用 CMake 和 Boost 的 C++ 项目,它在 Linux 下编译/链接没有任何问题。我正在努力通过 Visual C++ 2012 将其移植到 Windows。

我的 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_librarieswith 。${Boost_LIBRARIES}上面的message命令也显示所有找到的文件,没有任何问题。

此外,所需的库libboost_unit_test_framework-vc110-mt-gd-1_53.lib应按原样显示。

库依赖项的屏幕截图

但是,当我构建目标之一时,我得到

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++ 为 unit_test_framework 寻找前缀为boost而不是libboost的文件?

4

1 回答 1

0

好吧,检查两件事:

  • 确保文件实际存在于给定路径中,并且您具有读取权限。
  • 确保将 32 位 .LIB 用于 32 位构建,将 64 位 .LIB 用于 64 位 LIB。
于 2013-04-04T15:48:54.307 回答