3 回答
TA贡献1829条经验 获得超7个赞
只需按照依赖关系顺序指定lib和objs(正如您在上面所发现的)。 或者,如果您有一个循环依赖项(其中Liba引用libB中的一个函数,而libB在Liba中引用一个函数),那么只需在命令行上指定两次lib。这也是手册的意思。例如: gcc foo.c -lfoo -lbar -lfoo
使用 -(
和 -)
Params用于指定具有这种循环依赖关系的一组档案。请参阅GNU链接器手册 --start-group
和 --end-group
..看见 这里 更多细节。
TA贡献1836条经验 获得超3个赞
档案之间可能存在相互依赖关系,因此必须通过从另一个归档中提取成员来解决从一个存档中提取成员的问题。如果这些依赖项是循环的,则必须在命令行上反复指定档案以满足以前的引用。
$ cc -o prog .... -lA -lB -lC -lA -lB -lC -lA
重复存档规范的确定和维护可能很繁琐。
-z rescan-Now选项使此过程更简单。在命令行上遇到该选项时,链接编辑器立即处理-z rescan-Now选项。在此选项之前从命令行处理的所有档案都会立即重新处理。此处理尝试定位解析符号引用的其他存档成员。此存档重新扫描将继续进行,直到在没有提取新成员的情况下对归档列表进行传递。前面的示例可以简化如下。
$ cc -o prog .... -lA -lB -lC -z rescan-now
或者,-z rescan-start和-z rescan-end选项可用于将相互依赖的档案分组为存档组。当命令行上遇到关闭分隔符时,链接编辑器将立即重新处理这些组。在组中找到的档案将被重新处理,以试图找到解析符号引用的其他归档成员。此存档重扫描将继续进行,直到在未提取新成员的情况下对归档组进行传递。使用归档组,可以编写前面的示例,如下所示。
$ cc -o prog .... -z rescan-start -lA -lB -lC -z rescan-end
- 3 回答
- 0 关注
- 1329 浏览
添加回答
举报