#cpp #c
Есть бинарник main.o который был скомпилирован на g++ и fun.o, скомпилированный на gcc. При этом в своем коде main использует ф-цию из файла fun.c. Могу ли я объеденить эти два файла в одну прогу?
Ответы
Ответ 1
Проблема, описанная в комментариях — наличие name mangling в объектных файлах, компилируемых C++. Поэтому если вы включаете header на C в файл на C++, он декларирует функцию по бинарным правилам для C++, и эту декларацию компоновщик не может сопоставить с кодом функции в объектом файле на C. Попробуйте записать так в общем заголовочном файле: #ifdef __cplusplus extern "C" { #endif // тут код на C #ifdef __cplusplus } #endif С точки зрения стандарта, функция, описанная внутри extern "C", имеет C linkage. Впрочем, если вы знаете, что это такое, вы и так знаете ответ на этот вопрос.Ответ 2
Если версия g++ и gcc совпадает, то слинкуется без проблем.
Комментариев нет:
Отправить комментарий