2016-09-27 11 views
-1

Это может быть глупый вопрос, но я не уверен на 100% и не могу найти хороший ответ через googling, поэтому я подумал, что должен его спросить.Компиляция библиотек C, которые должны быть связаны в C++-сборках ... вам нужно указать стандарты C++?

Я создаю несколько библиотек C на новом компиляторе, который будет связан с кодом C++. Я собираю библиотеки с нуля, потому что я перехожу к версиям компилятора из gcc4.x в gcc5.x, что требует от меня перекомпилировать все мои библиотеки на C++ с помощью -std = gnu ++ 14 (языковой стандарт I'm таргетинг). Мой вопрос: мне нужно добавить -std = gnu ++ 14 в мои значения CFLAG при компиляции в библиотеки C? Я не думаю Я делаю, но хочу подтвердить, что я не буду сталкиваться с серьезными проблемами в будущем.

Спасибо.

+3

Нет перекомпилировать, C имеет двоичный интерфейс приложения (ABI) –

+0

. Полезная информация здесь: https://isocpp.org/wiki/faq/mixing-c-and-cpp – yano

ответ

1

No. При компиляции кода C с компилятором, вы можете указать версию языка C, который вы используете, но вы не можете указать ++ версию языка C. Было бы нецелесообразно указывать версию языка C++, потому что не существует разумного эффекта, который может иметь такая настройка.

+0

Спасибо - это то, что я предполагал, но нуждался в подтверждении. – user797963

0

Поскольку компилятор C++ будет управлять символьными именами, вы захотите окружить C-код блоком extern C {. Обычная идиома такая.

#ifdef __cplusplus 
extern "C" { 
#endif 

/* My C symbols, functions, etc */ 

#ifdef __cplusplus 
} 
#endif 
+0

Это действительно необходимо? он может просто сделать код в * .c файле? – Nick

+1

@Nick: Было бы неплохо прочитать о различии между заголовками и библиотеками (т. Е. Объектными файлами). – Olaf

+2

@ Ник это * абсолютно необходимо * расширение файла не имеет большого значения, но gcc попытается скомпилировать его на основе, но вы можете переопределить это. –