【问题标题】:Remove boost dependency when linking to a library that uses boost with cmake链接到使用 boost 和 cmake 的库时删除 boost 依赖项
【发布时间】: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


【解决方案1】:

Visual Studio 似乎可以,但通常不是:

Linking static libraries to other static libraries

【讨论】:

    【解决方案2】:

    Boost 查找模块中有一个名为Boost_USE_STATIC_LIBS 的选项。将其设置为“开”。我的罐装 Boost CMake 看起来像:

    set(Boost_USE_STATIC_LIBS ON)
    set(Boost_USE_MULTITHREADED ON)
    find_package(Boost ...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多