• boost库的链接问题小记


    一直有疑问,boost部分库需要编译成lib或者dll才能使用,貌似默认的都是链接的静态库,但是比如regex,使用时从来不需要#pragma comment(lib,"")或者在link选项里添加进去,表示不解。后来网上一搜,boost 里有个auto_link.hpp,貌似来帮你完成链接工作...

    下面转载...

    使用boost的许多库都只需包含头文件,例如:

    #include <boost hread.hpp>

    此时,不用包含库文件,boost的auto-link机制将会自动帮我们包含对应的静态lib。也就是说,boost默认是以静态方式链接的,这样我们的工程属性最好也设为Multi-threaded (Debug)。如果想使用dll动态方式链接,需要预先定义宏:

    #define BOOST_ALL_DYN_LINK

    同样,此时boost也会默认帮我们包含对应的lib。如果不想使用boost提供的auto-link机制,或者对它的自动链接不太放心的话(其实大可不必担心),可以预先定义宏:

    #define BOOST_ALL_NO_LIB

    然后使用以下方法链接:

    #pragma comment(lib, "boost_thread-vc90-mt-1_39.lib")

    #pragma comment(lib, "boost_thread-vc90-mt.lib")

    这两个lib其实是一样的,实在不明白boost编译时为什么每个库都要复制一份,难道是因为后者在升级boost版本后不用改代码?另外还有一个比较有用的宏:

    #define BOOST_LIB_DIAGNOSTIC

    它可以让VC在编译时的output窗口中输出程序具体链接了哪些boost库以及链接顺序。

    关于boost的auto-link机制,详细可以看看boostconfigauto_link.hpp里的代码,很容易可以读懂,并且值得我们学。

  • 相关阅读:
    数学之美
    作为一个程序员,你知道每天自己在做什么吗
    搭建ssm框架log4j日志
    webpack实践——DLLPlugin 和 DLLReferencePlugin的使用
    一些实用的技巧
    详解Vue 开发模式下跨域问题
    vue resource 携带cookie请求 vue cookie 跨域
    解决vue中element组件样式修改无效
    ES6 Promise 异步操作
    js 字符串操作函数
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3392207.html
Copyright © 2020-2023  润新知