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

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

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

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

0

Решение

Поскольку пакет написан на 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 ++, каков эффект extern «C»?

1

Другие решения