zoukankan      html  css  js  c++  java
  • 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里的代码,很容易可以读懂,并且值得我们学。

  • 相关阅读:
    js判断是移动端还是PC端
    如何删除mysql注释
    Javascript库的产生和解读
    zeptojs库解读3之ajax模块
    zeptojs库解读2之事件模块
    zeptojs库解读1之整体框架
    发起图片请求的几种可能性(webkit内核)
    让zend studio 支持 redis函数自动提示
    4种常见的MySQL日志类型
    redis 安装
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3392207.html
Copyright © 2011-2022 走看看