Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Есть ли способ объеденить 2 бинарника, написанных на разных языках в один?

#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 совпадает, то слинкуется без проблем.

Комментариев нет:

Отправить комментарий