构建Boost动态链接会产生链接错误吗?

时间:2014-02-05 13:24:46

标签: c++ boost build jenkins

我正在尝试构建boost并生成dll,但无论我做了什么并没有解决问题。

我在这里得到的东西:

  

创建库bin.v2 \ libs \ thread \ build \ msvc-11.0 \ dbg \ adrs-mdl-32 \ async-excpt-on \ thrd-mlt \ boost_thread-vc110-mt-gd-1_53.lib和object bin.v2 \库\螺纹\构建\ MSVC-11.0 \ DBG \的ADR-MDL-32 \异步-excpt上\ THRD-MLT \ boost_thread-vc110-MT-GD-1_53.exp   thread.obj:错误LNK2019:解析外部符号 “__declspec(dllimport的)公共:__thiscall升压::阳历:: greg_month :: greg_month(无符号短)”(_ 小鬼 ?? 0greg_month @公历@升压@@ QAE @ G @ Z)在函数“public:__thiscall boost :: gregorian :: date :: date(enum boost :: date_time :: special_values)”中引用“(?? 0date @ gregorian @ boost @@ QAE @ W4special_values @ DATE_TIME @ @@ 2 Z)   thread.obj:错误LNK2019:解析外部符号 “__declspec(dllimport的)公共:__thiscall升压::阳历:: greg_month ::运算符无符号短(无效)常量”(_ 小鬼 ?? Bgreg_month @公历@ boost @@ QBEGXZ)函数__catch $?make_external_thread_data @?A0x9b8c45f0 @ boost @@ YAXXZ $ 0   bin.v2 \ libs \ thread \ build \ msvc-11.0 \ dbg \ adrs-mdl-32 \ async-excpt-on \ thrd-mlt \ boost_thread-vc110-mt-gd-1_53.dll:致命错误LNK1120:2未解决的外部

这里有一些关于设置的信息:

操作系统:W7 x64

构建命令:

  

B2 -j%NUMBER_OF_PROCESSORS%--abbreviate路径工具集= MSVC-11.0定义= _SECURE_SCL = 0定义= _CRT_SECURE_NO_DEPRECATE限定= _CRT_SECURE_NO_WARNINGS --without-MPI地址模型= 32变体=调试安装链接=共享运行时链接= shared threading = multi asynch-exceptions = on exception-handling = on extern-c-nothrow = off --prefix = .. \ boost   cd ..

我已将CYGWin安装到计算机上。

这是我到现在为止所尝试过的;

*我试图在32位命令窗口中构建它(我使用jenkins来构建boost)                  

*我在boost config / user.hpp

中写了#define BOOST_ALL_DYN_LINK

*我在boost config / user.hpp中写了#define BOOST_ALL_NO_LIB

以前是否有人遇到过此类问题?我在任何地方都找不到任何东西?


修改

有关于我的问题的更新。我可以构建它以便发布。我唯一改变的是:

B2 -j%NUMBER_OF_PROCESSORS%--abbreviate路径工具集= MSVC-11.0定义= _SECURE_SCL = 0定义= _CRT_SECURE_NO_DEPRECATE限定= _CRT_SECURE_NO_WARNINGS --without-MPI地址模型= 32的变体=释放 install link = shared runtime-link = shared threading = multi asynch-exceptions = on exception-handling = on extern-c-nothrow = off --prefix = .. \ boost cd ..

可能是什么问题?我该如何解决?

提前感谢任何建议。

3 个答案:

答案 0 :(得分:2)

实际上我找到了解决方案:

我使用bjam的方式是正确的,足以动态构建增强。在那个阶段,我不应该定义任何东西。编译后,我更改了user.hpp和#define BOOST_ALL_DYN_LINK。 这样我自己的项目(使用boost)将理解提升是动态的。这就是应该如何建立助推器的方式。

这似乎是最好的方法,因为boost会按预期自动解码必要的lib和dll并且运行良好。

答案 1 :(得分:1)

我发现有很多手动步骤可以实现成功的增强版本。如果您不想通过这些手动步骤并避免开销,请尝试BlueGo,前提是您要使用MSVC工具集。 BlueGo允许配置32/64位,调试/释放模式等。

答案 2 :(得分:0)

我再次遇到了这个问题。我以前使用的是Boost 1.54。现在-提高1.71。 我认为,真正的原因是boost::thread依赖项列表缺少boost::date_time。对于我的两个版本都有效的是,在requirements的{​​{1}}规则的底部添加了以下几行:

libs/thread/build/Jamfile.v2

让我们看看我在Github上创建了一个issue