【问题标题】:Visual Studio Boost Thread /MT Linking IssuesVisual Studio Boost 线程/MT 链接问题
【发布时间】:2012-01-27 22:22:06
【问题描述】:

我正在使用 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 有误?

【问题讨论】:

    标签: visual-studio boost linker boost-thread mt


    【解决方案1】:

    砰!链接器被击败!

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 2020-09-08
      • 2011-03-29
      相关资源
      最近更新 更多