компилятор gcc по-разному связывается на двух серверах - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть большая исходная кодовая база C ++, которая без ошибок компилируется и связывается на одном сервере Linux.

Я сейчас пытаюсь настроить то же приложение на новом сервере, поэтому проверил то же самоекод в новом окне.

Однако, когда я выполняю идентичную команду make для идентичного кода в этом новом окне, я получаю ошибки.Причина, по-видимому, заключается в том, что в старом окне создаются файлы общей библиотеки (.so).В новом окне, которое использует идентичный код и, следовательно, make-файлы, создаются статические библиотеки (.a).

Используемый компилятор также выглядит так же - gcc-3.4.6.

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

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011

Обратите внимание, что компоновщик ld является частью binutils, которая поставляется со стандартными двоичными файлами как часть имеющегося у вас дистрибутива Unix, и является , а не частью gcc пакета.

Следовательно, при переходе от старого сервера к новому серверу есть вероятность, что вы перейдете от старого ld к новому ld.

Поскольку библиотека создается впервыекомпоновщику было бы интересно проверить его.

Обратите внимание, что если вы подозреваете компилятор (так как он выполняет вызов ld), вы можете написать исполняемый скрипт ld, который просто повторяетаргументы, которые он получает, а затем вызывает реальное ld за кадром (вмешательство в $PATH должно заставить вас действовать).

Звучит естественно, что это либо случай различных аргументов (почему?)другой binray, выясните, какой из них, и вы будете на шаг ближе к решению вашей проблемы.

1 голос
/ 22 ноября 2011

configure материал мог генерировать немного другие Makefile -s.

И когда вы связываете с -lfoo, компоновщик сначала пытается динамически libfoo.so, а затем статически libfoo.a.

GCC сейчас версии 4.6.2 , поэтому ваша 3.4.6 версия очень старая. Рассмотрите возможность его обновления, поскольку с тех пор GCC добился большого прогресса.

Попробуйте использовать gcc -v (возможно, как make CC='gcc -v'), чтобы понять, что происходит при сборке.

И дайте гораздо больше подробностей, если вам нужна реальная помощь. Какие именно библиотеки задействованы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...