【问题标题】:VC++ 2010 wants to link boost libararies i didn't even specifyVC++ 2010 想要链接我什至没有指定的 boost 库
【发布时间】:2011-02-27 00:05:00
【问题描述】:

我正在尝试使用 MSVC 2010 而不是 GCC 构建我的应用程序。使用 GCC 一切正常。我的应用程序使用 boost_system 和 boost_thread 库。 我在“系统”布局中使用 VC2010 构建了 boost,这意味着库仅命名为 libboost_system.lib(而不是 libboost_system_compiler_threading_version_wtf_snafu.lib) 这些库位于 C:\Boost\lib 中, Makefile 指定

LFLAGS        = /NOLOGO /INCREMENTAL:NO /SUBSYSTEM:CONSOLE
LIBS          = /LIBPATH:C:/Boost/lib libboost_system.lib libboost_thread.lib Ws2_32.lib

调用 nmake 时会编译,但尝试链接时会退出

LINK : fatal error LNK1104: cannot open file 'libboost_date_time-vc100-mt-1_43.lib

我是认真的,WTF?我告诉它链接 libboost_systen.lib 和 libboost_thread.lib 它为什么会尝试链接 libboost_data_time 以及为什么它假设我在“标记”布局中构建了库? 如何阻止 MSVC 变得聪明并猜测我可能想要链接的内容?

谢谢, 菲利普

【问题讨论】:

    标签: visual-c++ visual-studio-2010 boost linker


    【解决方案1】:

    这是 Boost 库的一个特性,它带有兼容的编译器,用于自动链接。

    (那些复杂的库名称涵盖了平台上可用的无数线程和链接选项;有充分的理由在 Windows 上使用该约定...)

    更多信息在这里:

    http://www.boost.org/doc/libs/1_33_1/more/getting_started.html#auto-link

    我找不到更新版本的页面,但我相信 BOOST_ALL_NO_LIB 和相关选项在 1.43 中仍然有效。

    【讨论】:

      【解决方案2】:

      假设您正在自动链接(即您已定义 BOOST_ALL_DYN_LINK 或库特定的等效项)。

      对于布局“系统”,您必须定义预处理器宏:

      BOOST_AUTO_LINK_NOMANGLE
      

      链接到正确的库名称。

      对于“标记”布局,您必须定义预处理器宏:

      BOOST_AUTO_LINK_TAGGED
      

      链接到正确的库名称。

      我不知道您是否可以为某些库执行此覆盖并为其他库保留默认值。我想这将是一个非常繁琐的设置。

      【讨论】:

        猜你喜欢
        • 2014-03-16
        • 1970-01-01
        • 2016-11-16
        • 2012-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多