如何一次性获取所有重复的符号链接器错误?

时间:2010-07-14 09:12:54

标签: c++ xcode linker g++

我正在XCode中构建一个使用两个库的C ++项目。比如说libX.a和libY.a.在libX.a和libY.a上有一些常见的函数定义,我得到了重复的符号链接器错误。

这很好,但我一次只能收到一个错误。一旦我修复了错误,我将得到下一个重复的符号错误,并重复此过程。

这种方法有两个问题:

  1. 我没有确切的重复错误数。我想知道找到的所有重复符号。因此,我可以在几个开发人员之间分发修复。

  2. 与构建库然后链接生成可执行文件所花费的时间相比,修复错误的速度足够快。

  3. 这可能吗?我的意思是可以通过设置任何标志,以便链接器一次性提供所有重复的符号。

    编辑:添加示例代码以澄清: 让我举一个例子:

    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
    

    我想要的是立刻得到这两个错误。所以我修复了所有这些,然后一次性链接。

    由于

    最诚挚的问候, 马克

1 个答案:

答案 0 :(得分:3)

您可以使用nm命令列出库中的所有符号,并使用sort和uniq -d打印重复项。类似的东西:

nm -j test1.o test2.o | sort | uniq -d

这也将列出它们共同的未定义符号。您可以获得nm -u的列表。

有点黑客,但它可能会让你更快。