используйте -v, чтобы увидеть, что вызов, похоже, не работает в Xcode

#c #xcode #linker-errors #ld

#c #xcode — код #компоновщик-ошибки #лд

Вопрос:

Я получаю сообщение об ошибке при создании программы на C в Xcode: ld: 1 повторяющийся символ для архитектуры x86_64 clang: ошибка: команда компоновщика завершилась ошибкой с кодом выхода 1 (используйте -v, чтобы увидеть вызов)

Добавление -v к «другим флагам компоновщика» не дает мне дополнительной информации. Я очистил и перестроил. Я также попытался передать -v в clang на всякий случай.

Я унаследовал файл .cpp с файлом.hpp, который содержит массу включений, поэтому нужно иметь возможность найти, какой заголовок включает в себя метод-нарушитель. Не уверен, как я мог бы легко найти метод-нарушитель без дополнительной информации от компоновщика.

Идеи о наилучшем подходе к поиску повторяющихся символов, а также к решению этой проблемы с -v не работает?

Я также пытался передать —verbose .

Комментарии:

1. Если вы посмотрите немного выше этой строки в выходных данных, там будет написано «дублировать символ ‘имя символа’ в […]». Точный вызов скажет вам очень мало.

2. Нет, он сообщает, в каких файлах встречаются дубликаты, но он ничего не говорит мне о том, из каких .hpp или .h он включается. Существует множество файлов .h, которые включаются из стороннего SDK, поэтому было бы очень трудоемко пытаться устранять возможности по одному и перестраивать каждый раз. Также мне может понадобиться сделать это снова, поэтому я хочу знать, почему -v не работает.

3. @molbdnilo Я знаю, в чем проблема, я просто не знаю простого и быстрого способа найти нарушителя в длинном списке #includes, которые взяты из стороннего SDK. Я унаследовал код, и теперь мне нужно его очистить, чтобы я мог использовать класс с проблемным .hpp из других .cpp.

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

5. @molbdnilo Я могу, но это неудобно. Думаю, мне придется прибегнуть к переходу к местоположению SDK в терминале и запуску grep -r <оскорбительное имя>. Не самый эффективный процесс, особенно если их больше 1.