This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TMS570LC4357:将 libc.a 与静态库合并

Guru**** 2980250 points

Other Parts Discussed in Thread: TMS570LC4357

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/940080/compiler-tms570lc4357-merging-of-libc-a-with-static-library

器件型号:TMS570LC4357

工具/软件:TI C/C++编译器

大家好、

适用于 TMS570LC4357处理器系列。 我正在创建一个 CCS 项目来生成静态库;例如 Test.lib。

我正在使用带有"r"标志的 ARM 归档器(armar)来生成此库、我将此库包含在其他可执行文件中;例如、Check.out。

现在、如果我想从 Check.out 中排除 libc.a 的依赖关系、并且只想让 它依赖于 Test.lib、那么我如何实现它呢?

简而言之、使用此 ARM 归档器、我是否有可能合并 Test.lib 中的 libc.a、以便仅通过链接 Test.lib 即可正确编译 Check.out?

有人可以帮助我吗?

我们将感谢您的快速响应。

此致、

Shivam Kakad

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Shivam Kakad"]如果我想从 Check.out 中排除 libc.a 的依赖关系、并且只想 对 Test.lib 具有依赖关系、那么我如何才能实现这一点?

    没有直接的方法来实现它。  首先、您必须了解 libc.a 不是目标文件库、而是索引库。  完成此操作后、您可以考虑将正确的 RTS 库与 Test.lib 相结合。  但是、每次更改编译器的版本时、都必须重复此过程。

    让主应用程序同时依赖于 Test.lib 和 libc.a 变得更加简单和安全  您必须看到这种方法存在一些缺点。  这是什么?

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 George 的回复。

    实际上、我们希望通过 make 文件环境来实现它、我相信我们不会更改编译器版本。(当前为 ti-cgt-arm_18.1.3.LTS)。 我想知道、如何使用我的 Test.lib 生成正确的 RTS 库、以便我不会对 libc.a 有任何依赖?

    此外、是否有任何方法可以将库合并/合并到单个库中。 例如、 将 F021_API_CortexR4_BE_L2FMC.lib 与 Test.lib 相结合?

    此致、

    Shivam Kakad

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我仍然不明白为什么要合并库。 尽管我会回答你的问题、但我仍然担心你会让事情变得更糟、而不是更好。

    您需要了解两个单独但相关的主题。  第一个主题是索引库。  第二个主题是如何组合包含目标文件的两个库。   

    要了解索引库的主题、请在 TI ARM 汇编工具手册中搜索 标题 为"库信息归档器说明"的子章节。  关键是了解 libc.a 已替换为与编译器构建选项最匹配的 RTS 库。  要查看所选的 RTS 库、请查看链接器映射文件。  如果您选择将 RTS 库与另一个库相结合、则这是要使用的库、而不是 libc.a.

    下面是一个示例、展示了如何组合两个库。  请注意、两个库都不能是类似 libc.a.的索引库  在这个示例中、库1.lib 和2.lib 被组合成一个名为 this.lib 的新库。   

    % mkdir empty_dir
    % cd empty_dir
    % armar -x \full\path\TO\one.lib
    % armar -x \full\path\TO\two.lib
    % armar -r th3.lib * 

    第1行和第2行创建一个空目录、然后将其更改为空目录。  第3行提取 one.lib 中的所有目标文件。  第4行对 two.lib 执行相同的操作。  第5行使用来自 one.lib 和 two.lib 的所有目标文件创建3.lib。   

    实用程序 armar 是归档器。  它记录在之前参考的同一手册中。

    需要考虑的一些限制...

    • 在3e.lib 内部、无法知道任何目标文件是来自1.lib 还是来自2.lib。   
    • 如果任何文件具有相同的名称、则会使用来自 two.lib 的文件。  来自 one.lib 的值丢失。

    谢谢、此致、

    乔治