• boost的link 和 runtime-link,搭配shared 和 static


    转自:http://blog.csdn.net/yasi_xi/article/details/8660549

    link:生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用 static方式。

    runtime-link:动态/静态链接C/C++运行时库。同样有shared和static两种方 式,这样runtime-link和link一共可以产生4种组合方式。虽然它和link属性没有直接关系,但我们习惯上,一个工程如果用动态链接那么所有库都用动态链接,如果用静态链接那么所有库都用静态链接。所以这样其实只需要编译2种组合即可,即link=shared runtime-link=shared和link=static runtime-link=static。


    还有人总结windows下boost库的命名特点:

    link=static runtime-link=static 得到 libboostxxxxx.lib 
    link=shared runtime-link=shared 得到 boostxxxx.lib 和 boostxxxx.dll 
    由以上的文件夹层次结构基本就可以得出结论: 
    1、以“lib”开头的是“link-static”版本的,而直接以“boost”开头的是“link-shared”版本的。 
    2、有“d”的为debug版本,没有的则是release版本。 
    3、有“s”的为“runtime-link-static”版本,没有的则是“runtime-link-shared”版本。 
    4、有“mt”的为“threading-multi”版本,没有的则是“threading-single”版本。


    一位在微软做过编译器开发的大牛是这样解释的:

    假设一个库A依赖于库B,我们自己的程序client依赖于库A,即:

    1363048971_5435 
    那么,link指的是client->A,runtime-link指的是A -> B

    配置                   链接过程                                           运行时需要的文件 
    --------------------|-------------------------------------------------|--------- 
    link=static         |  client通过A.a (A.lib)静态包含A;                | client 
    runtime-link=static |  A通过B.a (B.lib)静态包含B;                     | 
                        |  不关 .so .dll的事                              | 
    --------------------|-------------------------------------------------|--------- 
    link=static         |  client通过A.a (A.lib)静态包含A;                |  client 
    runtime-link=shared |  在运行时,client要动态调用B.so (B.dll)           |  B.so (B.dll) 
    --------------------|-------------------------------------------------|--------- 
    link=shared         |  client会包含A.a (A.lib);                       |  client 
    runtime-link=shared |  A会包含 B.a (B.lib);                           |  A.so (A.dll) 
                        |  但都只保存动态库的真正实现的stub,                |    B.so (B.dll) 
                        |  运行时通过stub去动态加载                        | 
                        |      A.so (A.dll)                               | 
                        |      B.so (B.dll)                               | 
                        |  中的实现                                       | 
    --------------------|-------------------------------------------------|-------- 
    link=shared         |  client会包含A.a (A.lib),但只包含真正实现的stub;|   client 
    runtime-link=static |  A通过B.a (B.lib)静态包含B;                     |   A.so (A.dll) 
                        |  运行时,client会动态调用A.so (A.dll)            | 

  • 相关阅读:
    go系列(6)- beego日志模块的使用
    shell学习(8)- ulimit调优系统参数
    新年开工
    No module named yum错误的解决办法
    如何杀死defunct进程
    图灵机器人微信自动聊天功能
    go系列(5)- beego自己写controller
    Hadoop/Spark 集群都启动了哪些 Java 程序
    Spark 不允许在 Worker 中访问 SparkContext
    Spark 安装
  • 原文地址:https://www.cnblogs.com/redrainblog/p/4136192.html
Copyright © 2020-2023  润新知