我正在一个 C 项目中工作,该项目在其构建系统中调用 ld,如下所示:
ld --allow-multiple-definition --architecture mips -EB --relocatable a.o b.o c.o -o mylib.a a.o b.o c.o
但是我遇到了这个命令行大小的问题(大约 32,000 个字符以及所需的所有目标文件 - 并使用 cygwin)所以我开始研究对其进行一些修改。其中之一是删除相同对象的第二个引用。像这样:
ld --allow-multiple-definition --architecture mips -EB --relocatable a.o b.o c.o -o mylib.a
然而,这打破了一切。我得到了很多很多未定义的引用。
为什么会这样?这两个调用有什么区别?我正在阅读 ld 的文档,但到目前为止还不好。
奖金
如果你足够幸运,你的 ld 版本可能有--start-group objs.o --end-group选项来处理类似的事情。