Makefile: добавить библиотеку в другой проект

Я хочу изменить существующий make-файл, включив в него другую статическую библиотеку, которую я сделал сам. Я следовал некоторым инструкциям, чтобы создать библиотеку; в настоящее время он содержит все файлы .o, кроме main.o. Назовем мою библиотеку libABC.a. Если это имеет значение, пакет, который я модифицирую, написан на C++, а библиотека, которую я включаю, написана на C.

Пока что я добавил -lABC в свой список библиотек и поместил библиотеку в тот же каталог, что и другие библиотеки, так что мне не нужно добавлять еще одну команду -L. Я переместил все файлы заголовков в каталог /include пакета (не уверен, что мне нужно было это сделать), чтобы избежать добавления еще одной команды -I. Компиляция как есть не дает мне ошибок, но если я попытаюсь добавить команду #include для одного из заголовочных файлов из библиотеки и вызвать функцию, я получаю ошибку undefined reference to function().

Любые идеи о том, что я могу сделать?


person hemihedral    schedule 10.08.2015    source источник
comment
Заголовки, написанные на C, завернуты в extern "C" { }? stackoverflow.com/questions/1041866/   -  person Darth Hunterix    schedule 10.08.2015


Ответы (1)


Поскольку пакет написан на C++, а ваша библиотека написана на C, вам, вероятно, придется использовать связь extern "C", так как C++, вероятно, ожидает искажения имен ваших символов.

Самый простой способ — обернуть определения функций C в заголовке в блоке extern "C", например:

#ifdef __cplusplus
extern "C" {
#endif

int myFunction();
int someOtherFunction(char *);

#ifdef __cplusplus
} // extern "C"
#endif

Убедитесь, что внутри блока заключены только ваши собственные определения функций; любые внешние библиотеки, которые вы #includeизвлекаете из своего заголовка, должны быть вне блока.

См. также: В исходном коде C++ каков эффект внешний "C"?

person fluffy    schedule 10.08.2015