Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何一次获取所有重复的符号链接器错误? 我在xCu码中构建了一个C++项目,它使用两个库。比如说libX.a和libY.a。在libX.a和libY.a上有一些常见的函数定义,我得到了重复的符号链接器错误_C++_Xcode_Linker_G++ - Fatal编程技术网

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

如何一次获取所有重复的符号链接器错误? 我在xCu码中构建了一个C++项目,它使用两个库。比如说libX.a和libY.a。在libX.a和libY.a上有一些常见的函数定义,我得到了重复的符号链接器错误,c++,xcode,linker,g++,C++,Xcode,Linker,G++,这很好,但我一次只得到一个错误。一旦我修复了错误,我将得到下一个重复的符号错误,这个过程将重复 这种方法有两个问题: 我没有重复错误的确切数量。我想知道找到的所有重复符号。这样我就可以在两个开发人员之间进行修复 与构建库然后链接生成可执行文件所需的时间相比,修复错误的速度足够快 这可能吗?我的意思是,是否可以设置任何标志,以便链接器一次给出所有重复的符号 编辑:添加示例代码以进行澄清: 让我在这里举个例子: test1.h void foo() { } void bar() { } test

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

这种方法有两个问题:

  • 我没有重复错误的确切数量。我想知道找到的所有重复符号。这样我就可以在两个开发人员之间进行修复

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

  • 这可能吗?我的意思是,是否可以设置任何标志,以便链接器一次给出所有重复的符号

    编辑:添加示例代码以进行澄清: 让我在这里举个例子:

    test1.h

    void foo()
    {
    }
    
    void bar()
    {
    }
    
    test2.h

    void foo()
    {
    }
    
    void bar()
    {
    }
    
    test1.cpp

    #include "test1.h"
    
    void j() 
    {
        foo();
        bar();
    }
    
    test2.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
    
    ld: duplicate symbol bar()    in test2.o and test1.o
    collect2: ld returned 1 exit status
    
    一旦我修复了foo,我就会得到如下所示的bar错误:

    ld: duplicate symbol foo()    in test2.o and test1.o
    collect2: ld returned 1 exit status
    
    ld: duplicate symbol bar()    in test2.o and test1.o
    collect2: ld returned 1 exit status
    
    我想要的是同时得到这两个错误。因此,我修复了所有这些问题,然后一次链接

    谢谢

    致以最良好的祝愿,
    Marc

    您可以使用nm命令列出库中的所有符号,并排序和uniq-d打印副本。比如:

    nm -j test1.o test2.o | sort | uniq -d
    
    这还将列出它们共享的未定义符号。你可以得到一个使用nm-u的列表


    有点像黑客,但它可能会让你更快到达那里。

    你可以使用nm命令列出库中的所有符号,然后排序和uniq-d打印副本。比如:

    nm -j test1.o test2.o | sort | uniq -d
    
    这还将列出它们共享的未定义符号。你可以得到一个使用nm-u的列表


    有点小技巧,但它可能会让你更快到达那里。

    我不知道Xcode,但是从命令行运行GNU链接器时,通常会列出所有重复的符号-不需要额外的开关。我不知道Xcode,但是从命令行运行GNU链接器时,通常会列出所有重复的符号-不需要额外的开关。