0

我正在使用 boost 的线程库,并且在 Visual Studio 中遇到了链接问题。

现在,我正在用 /MT 编译我的 VS 项目。我要链接的库名为libboost_thread-vc100-mt-1_48.lib,这似乎表明它也已使用 /MT 编译。

但是,如果我在链接器设置中关闭所有 /MD 相关库(属性 -> 链接器 -> 输入 -> 忽略特定默认库)...

msvcrt.lib 
msvcrtd.lib 
msvcprt.lib 
msvcprtd.lib

然后我得到链接器错误!

libboost_thread-vc100-mt-1_48.lib(thread.obj) : error LNK2001: unresolved external symbol __imp___gmtime64
libboost_thread-vc100-mt-1_48.lib(thread.obj) : error LNK2001: unresolved external symbol __imp___beginthreadex

仅通过关闭 /MD 相关库,这怎么可能?boost::thread 应该只链接 /MT 中的库(应该是 LIBCMT.LIB、LIBCPMT.LIB)。我是否错误地编译了boost?

4

1 回答 1

2

砰!链接器被打败了!

看来我的预感是对的。我没有正确编译 boost。要使用 boost 构建模拟 /MT,您需要链接到静态运行时库(链接到动态运行时库似乎是默认设置)。

执行此操作的命令(对于 boost::thread 的发布版本)是:

.\b2 --with-thread variant=release link=static threading=multi runtime-link=static

希望这可以帮助那些在他们的项目中打开 /MT 并使用 boost 的人!

于 2012-01-27T22:40:42.917 回答