Как получить все дубликаты ошибок компоновщика символов одновременно? - PullRequest
0 голосов
/ 14 июля 2010

Я строю проект C ++ в XCode, который использует две библиотеки. Скажем, например, libX.a и libY.a. В libX.a и libY.a есть некоторые определения функций, для которых я получаю ошибку компоновщика дубликатов символов.

Это нормально, но я получаю только одну ошибку за раз. Как только я исправлю ошибку, я получу следующую двойную ошибку символа, и этот процесс повторится.

У меня есть две проблемы с этим подходом:

  1. У меня нет точного количества повторяющихся ошибок. Я хотел знать все найденные дубликаты символов. Так что я могу распределить исправление между несколькими разработчиками.

  2. Исправление ошибки достаточно быстрое по сравнению со временем, необходимым для сборки библиотек, а затем связывания для создания исполняемого файла.

Возможно ли это? Я имею в виду, возможно ли установить любой флаг так, чтобы компоновщик давал все повторяющиеся символы одновременно.

РЕДАКТИРОВАТЬ: добавление образца кода для уточнения: Позвольте мне показать пример здесь:

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

Даже если есть 2 повторяющихся символа 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 Ответ

3 голосов
/ 14 июля 2010

Вы можете использовать команду nm для вывода списка всех символов в библиотеках, а также sort и uniq -d для печати дубликатов.Что-то вроде:

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

Здесь также будут перечислены неопределенные символы, которые у них общие.Вы можете получить список тех, у кого есть nm -u.

Немного хак, но это может помочь вам быстрее.

...