У меня есть базовая общая библиотека, которую я создаю для практики, и все, что она определяет, это заполнитель функций в виде
int placeholder() { return 1; }
Я создаю ее так же, как для libtool в make-файле для простоты (соответствующие части):
libfootest: $(OBJECTS)
libtool --mode=link $(CC) -g -O -o libfootest.la $(OBJECTS)\
-rpath /usr/lib
libfootest.o: $(SRCDIR)/$(SOURCES)
libtool --mode=compile $(CC) -c $(SRCDIR)/$(SOURCES)
install: libfootest
libtool --mode=install cp libfootest.la /usr/lib/libfootest.la
Теперь я могу убедиться, что a) Он установлен с соответствующими .so.*
и .la
, b) nm
имеет символ placeholder
, определенный в отдельном libtoolобъект (libfootest.o до ссылки), я считаю, что это все, что мне нужно.
Я сейчас создаю программу для целей тестирования,
#include "../includes/libfootest.h" //public prototypes are here
int main() {
int test = placeholder();
return 0;
}
И ссылки это как -lfootest
и он найден, хотя, к сожалению, я получаю неопределенную ссылочную ошибку для заполнителя!
/tmp/cc92NtSa.o: In function `main':
prototypes.cxx:(.text+0x19): undefined reference to `placeholder()'
Можете ли вы определить, что я сделал неправильно, или есть какой-то экспорт, который я должен выполнить длябиблиотека для работы?Я видел, как некоторые API-интерфейсы используют DLLEXPORT или аналогичные до их объявления функций, я не уверен, что они делают.