我有两个文件37064544_p1.cpp& 37064544_p2.cpp具有如下所示的相同内容:
int add(int x,int y){返回x + y;}我用它们编译了它们
g ++ -c 37064544_p2.cpp -o 37064544_p2.og ++ …
符号_Z3addii如何解决?
实施可以自由地做任何它喜欢的事情,你违反了 一个定义规则 。
实际上它会在第一场比赛后停止寻找任何给定的符号,这可能跟随文件插入档案的顺序。
我该如何更改此订单?
同 ar 你可以使用 a (之后)和 b (之前)修改器在插入目标文件时将它们放在存档中,但你仍然违反了ODR。
ar
a
b
如何防止ar出现重复符号?
据我所知,你不能 ar 由于某些语言允许使用相同的符号,因此相对愚蠢并且有充分的理由,这就是为什么在链接存档时没有任何错误(ODR违规无需诊断)。
你可以强迫 ld 阅读整个档案
ld
g++ -static 37064544driver.cpp -o 37064544driver.elf -L. \ -Wl,--whole-archive -l37064544pf -Wl,--no-whole-archive
或者您可以使用部分链接而不是传统存档,如果存在任何重复,则会出现错误
ld -r -o lib37064544pf.a 37064544_p1.o 37064544_p2.o