【发布时间】:2013-12-19 11:57:30
【问题描述】:
我正在尝试创建一个在其中使用 boost 文件系统的库,但我不想将该依赖项添加到使用该库的可执行文件中。我正在使用 CMAKE,因为它必须是跨平台的。
在 cmake 文件中,我添加了一个预处理器定义“BOOST_ALL_NO_LIB”以不自动链接并将 cmake 设置为使用静态库。这一切都会编译并创建库。 cmake代码如下所示。
set(Boost_USE_STATIC_LIBS ON)
add_definitions(-DBOOST_ALL_NO_LIB)
find_package(Boost REQUIRED COMPONENTS system filesystem)
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIR})
target_link_libraries(Utility
${Boost_LIBRARIES})
但是当我在库中链接时,我会收到如下错误。
Error 1 error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" ...
如果我将 boost 文件系统和 boost 系统库添加到我的库的 Librarian 中的附加依赖项中,可执行文件中的错误就会消失。有没有办法用 CMAKE 做到这一点?
【问题讨论】:
-
所以这个问题很有误导性?您不想停止自动链接(因为已经这样做了!)而是想使用 CMake 手动添加导入库?请澄清
-
CMake 是否说运行配置时找到了库?也许您为不同版本的 MSVC 编译了它们?
-
Cmake 找到了正确的版本,我确保我清理了使用正确的编译器和使用链接 = 静态构建的阶段文件夹。检查 cmake 选择了正确的文件夹。我也尝试过使用 boost 库的 runtime-link=static 版本。
标签: c++ visual-studio boost cmake static-libraries