Может кто-нибудь объяснить эту разницу компоновщика между g ++ 3.4.2 и g ++ 4.1.2? - PullRequest
0 голосов
/ 24 марта 2009

Я просто переместил некоторый код с одной платформы на другую, что потребовало изменения версий компилятора. Два из служебных источников вызвали проблемы с связью с неопределенными символами, в этом примере их называют Foo.c и Foo.h.

Все хорошо компилировалось и компоновалось с g ++ 3.4.2, и я подумал, что переход на g ++ 4.1.2 не составит труда. При использовании 4.1.2 компиляция прошла нормально, но связывание не удалось из-за неопределенных символов. Символы для каждой функции в Foo, которые использовались в других исходных файлах, т.е. Bar.c, были неопределенными, хотя Foo.h был включен в Bar.c.

Проблема заключалась в том, что файл Foo.c не содержал Foo.h. Таким образом, вопрос в том, как g ++ 3.4.2 связал этот код, когда 4.1.2 не смог? Я полагаю, что 3.4.2 ожидал файл .h и затем включал его «волшебным образом», чтобы избежать этой проблемы. Но есть ли у кого-нибудь лучшее объяснение?

1 Ответ

4 голосов
/ 24 марта 2009

Существует различие ABI между 3.4 и 4.1, поэтому убедитесь, что вы очистили и перекомпилировали проект. И обновил все библиотеки, с которыми вы ссылаетесь.

...