Вопрос по linker, gcc, c++ – Могут ли разные диалекты GCC быть связаны между собой?

18

Я знаю, что в принципе это, вероятно, неопределенное поведение, но в интересах работы с большим проектом, вот мой вопрос о GCC:

Предположим, я скомпилировал одну единицу перехода сgcc -std=c++98и еще один с-std=c++11, используя точно такую же установку компилятора. Есть ли какая-либо гарантия, что я смогу связать два объектных файла и получить четко определенную программу?

Насколько я могу судить, потенциальные проблемы могут исходить только от разных представлений заголовков библиотек из-за разных макросов, а те, в свою очередь, будут в лучшем случаеadd новые функции-члены, но не объекты-члены, для стандартных библиотечных классов.

Будет ли это как-то приемлемо для компиляции разных частей более крупного проекта с разными вариантами языкового диалекта?

Update: Я должен добавить ортогональный вопрос: как насчет использования двухdifferent версии GCC (скажем, 4.3 и 4.6), ноsame вариант диалекта (-std=c++98)? Списокв этой документации GCC Похоже, что библиотека совместима в обоих направлениях между 4.2.2 и 4.6.

Ваш Ответ

3   ответа
10

all-W...

MYPROG_CONFIG_FILE_LOCATION_GLIBCXX_DEBUG_GLIBCXX_DEBUG_PEDANTIC

but_GLIBCXX_DEBUG

Error: User Rate Limit ExceededshouldError: User Rate Limit Exceeded_GLIBCXX_DEBUGError: User Rate Limit Exceeded
Error: User Rate Limit ExceededMYPROG_CONFIG_FILE_LOCATIONError: User Rate Limit Exceededmemset.cError: User Rate Limit Exceededmemset.cError: User Rate Limit Exceededmemset.cError: User Rate Limit ExceededMYPROG_CONFIG_FILE_LOCATIONError: User Rate Limit ExceededMYPROG_CONFIG_FILE_LOCATION.
0

Error: User Rate Limit Exceeded
3

Error: User Rate Limit Exceeded

Suppose I compile one transation unit with gcc -std=c++98, and another with -std=c++11, using the exact same compiler installation. Is there any sort of guarantee that I can link the two object files and obtain a well-defined program?

Error: User Rate Limit Exceeded-fshort-enumsError: User Rate Limit Exceeded-stdError: User Rate Limit Exceeded

As far as I can tell, the potential problems can only come from different views of the library headers due to differing macros, and those in turn would at best add new member functions, but never member objects, to the standard library classes.

Error: User Rate Limit Exceeded

Would this somehow make it acceptable to compile different parts of a larger project with different language dialect options?

Error: User Rate Limit Exceededlibstdc++.soError: User Rate Limit Exceeded-std=c++98Error: User Rate Limit Exceeded-std=c++14.

Update: I should add an orthogonal question: What about using two different versions of GCC (say 4.3 and 4.6), but wht the same dialect option (-std=c++98)? The listing in this GCC documentation seems to suggest that the library is compatible in both directions between 4.2.2 and 4.6.

Error: User Rate Limit Exceededlibstdc++.soError: User Rate Limit Exceededlibstdc++.soError: User Rate Limit Exceeded

Error: User Rate Limit ExceededError: User Rate Limit Exceeded

Похожие вопросы