2010-07-22 3 views
0

Может ли кто-нибудь сказать мне, какой файл «/usr/include/c++/4.4/exception» связан с этой ошибкой. В этом файле нет основной информации. Я не уверен, как прочитать сообщение об ошибке.Нужна помощь в интерпретации ошибки ld linker

./libfoo.a(main.o): In function `main': 
/usr/include/c++/4.4/exception:62: multiple definition of `main' 
interface-wx/App.o:/usr/include/c++/4.4/exception:62: first defined here 
collect2: ld returned 1 exit status 

Любая помощь была бы принята с благодарностью.

ответ

0

Итак, я понял, что происходит ... на случай, если кто-то другой столкнется с этим. Хороший способ узнать, где это определение дубликата исходит из вашего кода, чтобы использовать команду:

nm -l name_of_object_file.o

нм используется для печати таблицы символов объектного файла. Я передал вывод в файл и искал main. Переключатель -l распечатает номера строк для символов. Это позволило мне увидеть, откуда взялось это другое отвратительное основное определение.

Для пользователей WxWidgets:
Макрос IMPLEMENT_APP(App) определяло основной для приложения, когда я действительно хотел, чтобы использовать мой главный. Исходный код (который я не писал) имел #define IMPLEMENT_WXWIN_MAIN в верхней части файла приложения, и, как я сказал ранее, используется IMPLEMENT_APP (приложение). Все отлично работало с wxWidgets 2.8.6, но когда я попытался использовать wxWidgets 2.9.1, у меня возникла эта проблема.

Решение:

Заменить IMPLEMENT_APP(App) с wxIMPLEMENT_APP_NO_MAIN(App);

2

Ну, как говорится. там есть несколько определений 'main'. проверьте эти два файла. main.cpp и interface-wx/App.cpp.

+0

спасибо за вашу помощь. Существует несколько определений main, по одному в каждом из этих файлов. Если я прокомментирую это в интерфейсе-wx/App.cpp, при связывании ничего не меняется. Если я прокомментирую одно в main.cpp все ссылки в порядке, но программа не запускается при ее выполнении. Я просто получаю сообщение об ошибке. Вот почему я пытался выяснить, может ли иметь к нему какой-либо файл исключений, упомянутый выше. Постскриптум Это программа wxWidgets, которая использовалась для установления связи с wxWidgets 2.8.6, но теперь эта проблема возникает при связывании с wxWidgets 2.9.1. – csmithmaui

+0

Так как вы не показывали программы. Я не знаю, почему эти программы не работают. Но я предполагаю. App.cpp может отображать GUI, а main.cpp будет выполнять фактическую задачу, которую вы хотите выполнить. Если это так. Тогда вы программируете это неправильно. найти несколько руководств/примеров по использованию wx-widgets через сеть. Итог: ваш полный проект должен содержать только одно определение main. Вам необходимо соответствующим образом настроить свой код, чтобы он работал. Комментирование не является решением. – claws

+0

Чтобы уточнить, интерфейс-wx/App.o создавался из файла под названием App.cc в одном каталоге выше (что и должно было произойти в соответствии с оригинальным автором). Я сбился с толку, потому что был также интерфейс-wx/App.cc, который также определил главную, но больше не компилируется. Я предполагаю, что он был использован для тестирования. Вот почему ничего не изменилось, когда я прокомментировал основной файл в этом файле для тестирования. – csmithmaui