неопределенная ссылка с automake

0

У меня есть общая библиотека (в c++), которая имеет функцию foo() (объявленную как extern c), которая вызывается функцией в проекте в C, который компилируется automake. поэтому я hv makefile.am, который направляет на include.am, где я добавил имя и расположение моей библиотеки /../Release/lib/libabc.so к переменной xyz_LDADD, точно у меня есть xyz_LDADD = libabc.so

объявление foo выглядит так:

#ifdef __cplusplus
extern "C" {
#endif
void foo(void);
#ifdef __cplusplus
}
#endif

когда я пытаюсь сделать, я получаю неопределенную ссылку на ошибку foo().

Если я изменю имя d библиотеки abc, я получаю сообщение об ошибке, поэтому я предполагаю, что компилятор сможет найти библиотеку.

У меня также есть некоторые статические библиотеки, которые работают нормально. Может кто-нибудь помочь пожалуйста.. Спасибо заранее

  • 1
    Вы пробовали: xyz_LDADD = -L/../Release/lib/ -labc ? (обычно вы не ставите полное имя библиотеки, только часть после «lib» и перед «.so».
  • 0
    да, я пытался, не работает :( все еще неопределенная ошибка ссылки :( любые другие предложения, пожалуйста, ???
Теги:
linker
compiler-errors
automake

1 ответ

0

Чтобы вызвать из c, метод c++ должен быть объявлен с помощью extern "C" или в блоке extern "C" extern "C". Не только в прототипе заголовка, но и в источнике.

Чтобы узнать, пытаюсь ли это найти символ foo в инструменте nm.

как это:

nm../Release/lib/libabc.so | grep foo

если вы видите слово foo без добавления, то метод foo объявленный с помощью extern "C" может быть использован из c-кода. если вы видите его с дополнительными символами до или после имени, то это c++, и он не может использоваться из c-кода.

  • 0
    Да, я вижу это без дополнительных символов, так как у меня есть extern C также в определении foo () :(
  • 0
    @ tahl90 вы можете увидеть это как неопределенное (U), вы должны дать код функции с телом. то, что вы дали, это объявление заголовка, оно не показывало, как объявлялась сама функция. это также поможет, если вы дадите вывод nm я вам дал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню