【问题标题】:How to build boost.log DLL that statically links to everything else boost?如何构建静态链接到其他所有东西的 boost.log DLL?
【发布时间】:2014-01-03 18:21:05
【问题描述】:

我想在 Windows (VS 2010) 上的 C++ 项目中使用 boost 日志库。一切都使用共享(DLL)运行时。由于我的项目包含多个模块,我需要将 boost.log 编译为 DLL。问题是,Boost.log 依赖于其他五个库:system、chrono、datetime、filesystem 和 thread。我不想拖动 6 个 DLL,我想在 boost.log 中静态链接它们。

我尝试在 config/user.hpp 中#define BOOST_LOG_DYN_LINK,但它没有帮助:当我构建日志库时,它要么构建为静态(不是我想要的),要么构建为引用 5 个其他 DLL(不是我想要什么)。

我需要一个静态链接所有 5 个依赖项的日志 DLL。有可能实现吗?

【问题讨论】:

  • 你们是不是已经厌倦了 boost log?图书馆的全部目的是让工作更轻松,但这似乎要求太多了。

标签: c++ boost


【解决方案1】:

我认为您会想要创建一个单独的 DLL 项目,以静态链接所需的 boost 库。可能这个项目不会添加任何其他代码(除了一些什么都不做的 DllMain 函数),但它会给你一个新的 DLL(例如 boostlibs.dll),你可以动态链接到你的应用程序。

【讨论】:

  • 为了使它工作,必须使用一些东西。基本上它必须被包装。我看到的唯一其他可能性是为此创建自定义构建脚本。
  • 这可以工作,只要我不在那个 DLL 之外的任何地方使用 boost.log。但是,这是行不通的,因为它看起来像“线程”库坚持作为一个 DLL(不能静态链接),并且它带有 3 个其他的 boost DLL。啊。
  • @Ivan Krivyakov,我能够很好地静态链接线程库。我确实在 user.hpp 中看到了关于 Boost.Threads “只能动态链接”的评论,但我认为该评论不再适用。
  • @Vinzenz,我可能弄错了,但我认为让函数显示在生成的 dll 中所需要做的就是用 __declspec(dllexport) 声明它们。对我的系统进行的快速测试表明,通过 #define'ing BOOST_HAS_DECLSPEC 和 BOOST_THREAD_BUILD_DLL 使用 boost 库是可能的。
  • @Aaron。我想我用 link=static 构建了整个 boost,而线程库根本没有构建。但我可能错了,我会仔细检查。
猜你喜欢
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 2015-02-25
  • 2015-08-24
相关资源
最近更新 更多