Привязка внешней библиотеки к проекту все еще дает неопределенную ссылку

У меня есть librdma.a, который мне нужно связать с моим текущим проектом. Когда я бегу нм на librdma.a вот что я получаю:

0000000000000000 T set_attribute

Это означает, что функция доступна в коде.

Теперь, когда я пытаюсь связать это . файл моего текущего проекта и создать . файл для этого с помощью этого Makefile.am: —

noinst_LTLIBRARIES=     libsrc.la

libsrc_la_SOURCES=      One.cpp \
Two.cpp \

libsrc_la_CPPFLAGS =    -I$(top_srcdir)/inc -I$(rdma_dir)/include

libsrc_la_LIBADD =      -L$(rdma_dir)/lib -lrdma

Это создает файл libsrc.a, который технически должен иметь определение set_attribute (), функции, которую я пытаюсь использовать. Но когда я бегу нм в этом архивном файле я получаю неопределенную ссылку.

                 U _Z8set_attributePP5attrlPcS2_

Кроме того, когда я пытаюсь делать полный проект, который в свою очередь использует этот файл libsrc.a, я получаю такие ошибки: —

../libfinal/.libs/libfinal.so: undefined reference to `set_attribute()'

0

Решение

Похоже, вы смешиваете библиотеку C с библиотекой C ++, а заголовки для библиотеки C не помещаются в extern C блок. Таким образом, в первой библиотеке и в библиотеке, на которую она ссылается, вы получите искаженное имя _Z8set_attrPP5attrlPcS2_.

1

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

Других решений пока нет …