Я хочу изменить существующий make-файл, включив в него другую статическую библиотеку, которую я сделал сам. Я следовал некоторым инструкциям, чтобы сделать библиотеку; в настоящее время он содержит все .o
файлы кроме main.o
, Давайте назовем мою библиотеку libABC.a
, Если это имеет значение, то пакет, который я изменяю, написан на C ++, а библиотека, которую я включаю, написана на C.
Пока я добавил -lABC
в мой список библиотек и поместил библиотеку в тот же каталог, что и другие библиотеки, так что мне не нужно добавлять другую -L
команда. Я переместил все файлы заголовков в /include
каталог пакета (не уверен, если я должен был это сделать), поэтому я могу избежать добавления другого -I
команда. Компиляция, как она есть, не дает мне ошибок, но если я пытаюсь добавить #include
Команда для одного из заголовочных файлов из библиотеки и вызова функции, я получаю undefined reference to function()
ошибка.
Любые идеи о том, что я могу сделать?
Поскольку пакет написан на 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»?