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

  • 相关阅读:
    [Tkinter 教程12] 布局管理 (Pack Place Grid)
    python 文本全选
    CMD窗口恢复默认设置
    Python基础第一天
    Windows:安装Python2.7、3.6与共存,安装pycharm
    Linux安装
    Python input() 函数
    python的continue和pass的区别
    Python 文件读写操作实例详解
    python tkinter教程-事件绑定
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3392207.html
Copyright © 2020-2023  润新知