Есть ли разница в связывании с gcc против g ++? - PullRequest
8 голосов
/ 18 июля 2011

Есть ли какие-либо различия в процессе компоновки между gcc и g ++?

У меня большой проект на C, и я просто переключил часть кода на C ++.Код пока не использует библиотеку std C ++, поэтому -llibstdc++ пока не требуется.

Ответы [ 3 ]

8 голосов
/ 18 июля 2011

Основное отличие состоит в том, что (при условии, что файлы обнаружены как C ++) g ++ устанавливает флаги, необходимые для связи со стандартной библиотекой C ++. Это может также настроить обработку исключений. Я бы не стал полагаться на тот факт, что только из-за того, что ваше приложение не использует стандартную библиотеку, она не нужна при компиляции в C ++ (например, обработчик исключений по умолчанию).

РЕДАКТИРОВАТЬ: Как отмечено в комментариях, у вас будут проблемы с любыми конструкторами (которые работают) для статических объектов, а также с невозможностью получения таблиц виртуальных функций (поэтому, если вы используете эти функции C ++, вам все равно нужно связать эта библиотека).

EDIT2: Если вы не используете специальный код C99 в своем проекте C, я бы просто переключился на компиляцию всего этого как C ++ в качестве первого шага в процессе миграции.

0 голосов
/ 18 июля 2011

gcc и g++ - это просто программы драйверов, которые не делают ничего, кроме вызова других программ, поэтому вы можете использовать опцию -v, чтобы точно узнать, что они делают - с какими другими программами они вызываюткакие аргументыТаким образом, вы можете точно увидеть разницу между связыванием с gcc и g++ для конкретной версии и архитектуры gcc, которую вы установили.Однако вы не можете рассчитывать на то, что останетесь прежними, если хотите мобильности.

В зависимости от того, что вы делаете, вас может заинтересовать аргумент -###

0 голосов
/ 18 июля 2011

Я думаю, что компоновщик g ++ будет искать имена искаженных функций CPP, и он отличается от имен Си. Я не уверен, что GCC может справиться с этим. (При условии, что вы можете явно использовать версию C, а не версию C ++).

Edit:

Это должно работать, если у вас есть

extern "C" {
<declarations of stuff that uses C linkage>
}

в вашем коде и объектный файл был скомпилирован с g++ -c. Но я не буду ставить на это.

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