自动为C/C++可执行文件生成目标文件(链接器)依赖项

栏目: C++ · 发布时间: 6年前

内容简介:如果有多个可执行文件(甚至是单个可执行文件)需要不同的依赖项集,那么处理它的正常,经典方法是使用库 – 静态.a或共享.so(或等效项) – 来保存对象可以由多个程序使用的文件,以及将程序与该库链接的文件.链接器会自动从静态存档中提取正确的目标文件.共享库过程略有不同,但最终结果是相同的:可执行文件在运行时具有正确的目标文件.对于任何程序,至少有一个程序唯一的文件(通常,这是包含main()程序的文件).该程序可能有一些文件.这些文件可能是已知的并且可以轻松列出.根据配置和编译选项可能需要的那些可能在程序之
我目前正在开发一个灵活的C/C++构建框架,我很快就会(有希望)开源. (有关背景,请参阅 this

问题).

我使用以下命令为源/头文件生成#include文件依赖项.

gcc -M -MM -MF

有没有一种巧妙地推断可执行文件的链接器(.o文件)依赖关系(在我的情况下单元测试目标平台的主要可执行文件)使用gcc / GNU实用程序以类似的方式?目前,该框架做了很多假设,并且在确定这些依赖关系时非常愚蠢.

我听说过一种方法,可以使用nm命令在目标文件中提出未定义符号列表.例如,在目标文件上运行nm(使用gcc -c编译)会出现类似这样的内容 –

nm -o module.o

module.o:         U _undefinedSymbol1
module.o:         U _undefinedSymbol2
module.o:0000386f T _definedSymbol

然后,人们将查找其他目标文件,其中定义了这些未定义的符号,以提供成功链接文件所需的目标文件依赖性列表.

这是确定可执行文件的链接器依赖性的最佳实践吗?有没有其他方法可以推断出这些依赖关系?假设在提出解决方案时,所有目标文件已经存在(即已经使用gcc -c编译).

如果有多个可执行文件(甚至是单个可执行文件)需要不同的依赖项集,那么处理它的正常,经典方法是使用库 – 静态.a或共享.so(或等效项) – 来保存对象可以由多个程序使用的文件,以及将程序与该库链接的文件.链接器会自动从静态存档中提取正确的目标文件.共享库过程略有不同,但最终结果是相同的:可执行文件在运行时具有正确的目标文件.

对于任何程序,至少有一个程序唯一的文件(通常,这是包含main()程序的文件).该程序可能有一些文件.这些文件可能是已知的并且可以轻松列出.根据配置和编译选项可能需要的那些可能在程序之间共享,并且可以通过库机制轻松处理.

您必须决定是否要使用静态库或共享库.创建共享库比创建静态库更难.另一方面,您可以更新共享库并立即影响使用它的所有程序,而静态库可以更改,但只有使用新库重新链接的程序才能从更改中受益.

翻译自:https://stackoverflow.com/questions/10670409/automatically-generate-object-file-linker-dependencies-for-c-c-executables


以上所述就是小编给大家介绍的《自动为C/C++可执行文件生成目标文件(链接器)依赖项》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

腾讯产品法

腾讯产品法

李立 / 浙江大学出版社 / 2018-1 / 49元

从QQ到微信,从《英雄联盟》到《王者荣耀》,腾讯公司凭借强大的产品力成为世界互联网企业中的佼佼者,其“小步快跑,试错迭代”的产品开发机制,“别让我思考”的极简主义理念,“变成白痴级用户”的用户驱动战略,都成为整个中国互联网行业竞相学习的典范。 本书向读者完整地呈现了腾讯产品设计的底层思路,阐述了设计者如何发现问题、定义问题、拆解问题的全过程,从“产品思维”出发,以需求、战略、产品设计开发与运......一起来看看 《腾讯产品法》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具