Линковка C файла к СPP
К своему коду взял 2 файла (.h и .с ) отсюда https://github.com/christhechris/libscrc/blob/master/src/_crc16tables.h положил в папку
cmake не линкуется
add_executable(mycode main.cpp crc/_crc16tables.c )
с ошибкой
undefined reference to `hz_calc_crc16_1021(unsigned char const*, unsigned int, unsigned short)'
Но если переименовать файл в cpp - собирается нормально.
Как правильно линковать c к cpp?
Ответы (1 шт):
Автор решения: user207200
→ Ссылка
Данная проблема связана с манглингом имен, который использует C++ компилятор. Для корректного поиска имен в объектном файле, скомпилированном компилятором C, компоновщику необходимо указать директиву extern "C"
. Можно обернуть как содержимое всего заголовочного файла, так и указать конкретную функцию.
#include <iostream>
extern "C" {
#include "_crc16tables.h"
}
int main() {
auto src = reinterpret_cast<const unsigned char *>("test");
std::cout << hz_calc_crc16_1021(src, 4, 32) << std::endl; // -> 7616
}
P.S. Параметры переданные в функцию выбраны случайным образом для проверки сборки.