2014-02-05 42 views
14

我试图建立提升和生成DLL的,但我所做的任何事情都没有解决问题。Building Boost动态链接提供链接错误?

这里什么我有:

创建库bin.v2 \库\螺纹\建立\ MSVC-11.0 \ DBG \美国存托凭证MDL-32 \异步excpt上\ THRD-MLT \ boost_thread-vc110-mt-gd-1_53.lib和object bin.v2 \ libs \ thread \ build \ msvc-11.0 \ dbg \ adrs-mdl-32 \ async-excpt-on \ thrd-mlt \ boost_thread-vc110-mt -gd-1_53.exp thread.obj:错误LNK2019:无法解析的外部符号“__declspec(dllimport)public:__thiscall boost :: gregorian :: greg_month :: greg_month(unsigned short)”(_ imp ?? 0greg_month @ gregorian @ 0 @ @ @ 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:error LNK2019:无法解析的外部符号“__declspec(dllimport)public:__thiscall boost :: gregorian :: greg_month :: operator unsigned short(void)const”(_ imp ?? Bgreg_month @ gregorian @ boost @@ QBEGXZ)在函数__catch中引用$?make_external_thread_data @?A0x9b8c45f0 @ boost @@ YAXXZ $ 0 bin.v2 \ libs \ thread \ build \ msvc-11.0 \ dbg \ adrs-mdl- 32 \异步-excpt上\ THRD-MLT \ boost_thread-vc110-MT-GD-1_53.dll:致命错误LNK1120:2周解析的外部

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

OS: 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变异=调试安装链接=共享运行时链接=共享线程=多非同步的例外=在异常处理=上的extern-C-抛出异常= OFF前缀= .. \提振 CD ..

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

在这里,我已经尝试到现在;

*我试图建立它在32位命令窗口(我用詹金斯打造提升)

*我在升压配置写的#define BOOST_ALL_DYN_LINK/user.hpp

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

有没有人遇到过这样的问题?我在任何地方都找不到任何东西?


编辑:

有一个关于我的问题的更新。我能够构建它用于发布。只有我改变的东西在这里:

b2 -j%NUMBER_OF_PROCESSORS%--abbreviate-paths toolset = msvc-11。0 define = _SECURE_SCL = 0 define = _CRT_SECURE_NO_DEPRECATE define = _CRT_SECURE_NO_WARNINGS --without-mpi address-model = 32 variant = release安装链接=共享运行时链接=共享线程=多asynch-exceptions = on exception-handling = on extern -c-nothrow = off --prefix = .. \ boost cd ..

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

先感谢您的任何建议。

+0

您可以BOOST_NO_USER_CONFIG抑制user.hpp:https://groups.google.com/forum/#!topic/boost-list/OSkv0cKjpVM –

+0

@thomas谢谢你的评论。其实我认为我需要#define BOOST_ALL_DYN_LINK定义,所以我将它添加到user.hpp作为我的配置。这样我定义了BOOST_ALL_DYN_LINK,如果你阅读上面的评论,似乎有必要。默认情况下,我认为user.hpp不被抑制,对吧? – MeM

+0

您是否尝试将'#define BOOST_ALL_DYN_LINK'直接放入date_time/compiler_config.hpp?这可能是一个坏主意,但BOOST_DATE_TIME_DECL似乎在那里定义。 –

回答

2

其实我已经找到了解决办法:

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

这似乎是最好的方式,因为升压自动解码所需的库和DLL的预期和运作良好。

1

我看到有很多手动步骤涉及到实现一个成功的助推构建。以防万一您不想通过这些手动步骤并避免开销尝试BlueGo,前提是您要使用MSVC工具集。 BlueGo允许配置32/64位调试/释放模式等等。