zoukankan      html  css  js  c++  java
  • 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)            | 

  • 相关阅读:
    LeetCode "Super Ugly Number" !
    LeetCode "Count of Smaller Number After Self"
    LeetCode "Binary Tree Vertical Order"
    LeetCode "Sparse Matrix Multiplication"
    LeetCode "Minimum Height Tree" !!
    HackerRank "The Indian Job"
    HackerRank "Poisonous Plants"
    HackerRank "Kundu and Tree" !!
    LeetCode "Best Time to Buy and Sell Stock with Cooldown" !
    HackerRank "AND xor OR"
  • 原文地址:https://www.cnblogs.com/redrainblog/p/4136192.html
Copyright © 2011-2022 走看看