我正在XCode中构建一个使用两个库的C ++项目。比如说libX.a和libY.a.在libX.a和libY.a上有一些常见的函数定义,我得到了重复的符号链接器错误。
这很好,但我一次只能收到一个错误。一旦我修复了错误,我将得到下一个重复的符号错误,并重复此过程。
这种方法有两个问题:
我没有确切的重复错误数。我想知道找到的所有重复符号。因此,我可以在几个开发人员之间分发修复。
与构建库然后链接生成可执行文件所花费的时间相比,修复错误的速度足够快。
这可能吗?我的意思是可以通过设置任何标志,以便链接器一次性提供所有重复的符号。
编辑:添加示例代码以澄清: 让我举一个例子:
test1.h
void foo()
{
}
void bar()
{
}
test2.h
void foo()
{
}
void bar()
{
}
test1.cpp
#include "test1.h"
void j()
{
foo();
bar();
}
测试2.cpp
#include "test2.h"
void k()
{
foo();
bar();
}
立即编译:
g++ -c test1.cpp
g++ -c test2.cpp
立即关联:
g++ -o final test1.o test2.o
即使有两个重复的符号foo和bar,我只得到foo的错误,如下所示:
ld: duplicate symbol foo() in test2.o and test1.o
collect2: ld returned 1 exit status
一旦我修复foo,然后我得到下面显示的条的错误:
ld: duplicate symbol bar() in test2.o and test1.o
collect2: ld returned 1 exit status
我想要的是立刻得到这两个错误。所以我修复了所有这些,然后一次性链接。
由于
最诚挚的问候, 马克
答案 0 :(得分:3)
您可以使用nm命令列出库中的所有符号,并使用sort和uniq -d打印重复项。类似的东西:
nm -j test1.o test2.o | sort | uniq -d
这也将列出它们共同的未定义符号。您可以获得nm -u的列表。
有点黑客,但它可能会让你更快。