【问题标题】:Why doesn't a C++ static library project have linker settings?为什么 C++ 静态库项目没有链接器设置?
【发布时间】:2011-09-22 12:11:06
【问题描述】:

揭示我的无知:为什么静态库项目(在我的情况下是 Visual Studio)在项目属性页面中没有链接器设置?我认为“链接”是一个大问题:图书馆,但显然我从根本上误解了一些东西。

【问题讨论】:

    标签: visual-studio linker static-libraries


    【解决方案1】:

    制作可执行文件是一个三步过程:

    1. 编译器将源代码转换为 到对象文件。
    2. 一个 档案员/图书馆员对对象进行分组 文件一起放入库中(这 步骤是可选的)。
    3. 链接器链接 目标文件和库一起创建 一个完整的可执行文件。

    库只是对象的集合,根据定义,这些对象尚未链接。链接器不用于创建库,因此没有链接器选项是有道理的。

    【讨论】:

      【解决方案2】:

      链接是将目标文件组合成可执行文件(和动态库,其格式类似于可执行文件)的过程。

      静态库没有链接,它们是目标文件的简单存档。

      当您在项目中引用静态库时,目标文件会从库中提取并与特定项目的文件链接在一起。

      【讨论】:

      • 那么如果一个可执行文件有一个静态库作为输入,它使用它的目标文件结合它自己的来构建exe?
      • 是的。有关 VC++ 使用的 COFF 格式的详细信息,请参阅here
      【解决方案3】:

      因为你不链接它,纯粹而简单。

      链接是将所有目标文件和库组合在一起以创建可执行文件的行为。在静态库项目中,您不是在创建可执行文件,而是在创建稍后将被链接的库。

      例如(这是 UNIX 而不是 Windows,但概念相似),您将使用编译器 cc 将源文件转换为目标文件,并使用归档器 ar 将它们转换为库。链接器(或链接编辑器)ld 不需要参与,直到您想进入下一步并将您的库包含到可执行文件中。

      【讨论】:

        猜你喜欢
        • 2011-02-20
        • 2013-04-25
        • 2019-03-13
        • 1970-01-01
        • 1970-01-01
        • 2017-11-25
        • 2011-09-06
        • 1970-01-01
        • 2014-04-07
        相关资源
        最近更新 更多