Привет ЛОР!
У openldap'a в contrib есть библиотека ldapc++. Соответственно, мне захотелось ей воспользоваться, но я столкнулся с проблемой:
/media/storage/Projects/Parusyncka/userldapwriter.cpp:7: ошибка: undefined reference to `vtable for UserLDAPWriter'
/media/storage/Projects/Parusyncka/userldapwriter.cpp:7: ошибка: undefined reference to `LDAPConstraints::LDAPConstraints()'
/media/storage/Projects/Parusyncka/userldapwriter.cpp:7: ошибка: undefined reference to `LDAPConnection::LDAPConnection(std::string const&, int, LDAPConstraints*)'
/media/storage/Projects/Parusyncka/userldapwriter.cpp:10: ошибка: undefined reference to `LDAPConnection::bind(std::string const&, std::string const&, LDAPConstraints*)'
/media/storage/Projects/Parusyncka/userldapwriter.cpp:12: ошибка: undefined reference to `LDAPException::~LDAPException()'
/media/storage/Projects/Parusyncka/userldapwriter.cpp:14: ошибка: undefined reference to `LDAPException::getResultMsg() const'
/media/storage/Projects/Parusyncka/userldapwriter.cpp:12: ошибка: undefined reference to `LDAPException::~LDAPException()'
/media/storage/Projects/Parusyncka/userldapwriter.cpp:7: ошибка: undefined reference to `LDAPConnection::~LDAPConnection()'
/media/storage/Projects/Parusyncka/userldapwriter.cpp:21: ошибка: undefined reference to `StringList::StringList()'
/media/storage/Projects/Parusyncka/userldapwriter.cpp:21: ошибка: undefined reference to `LDAPConnection::search(std::string const&, int, std::string const&, StringList const&, bool, LDAPConstraints const*)'
/media/storage/Projects/Parusyncka/userldapwriter.cpp:21: ошибка: undefined reference to `StringList::~StringList()'
/media/storage/Projects/Parusyncka/userldapwriter.cpp:26: ошибка: undefined reference to `LDAPEntry::getDN() const'
/media/storage/Projects/Parusyncka/userldapwriter.cpp:24: ошибка: undefined reference to `LDAPSearchResults::getNext()'
/media/storage/Projects/Parusyncka/userldapwriter.cpp:21: ошибка: undefined reference to `StringList::~StringList()'
/media/storage/Projects/Parusyncka/libldapcpp/include/LDAPException.h:23: ошибка: undefined reference to `vtable for LDAPException'
(.gcc_except_table+0x30):-1: ошибка: undefined reference to `typeinfo for LDAPException'
:-1: ошибка: collect2: error: ld returned 1 exit status
ls -l /media/storage/Projects/Parusyncka/libldapcpp/lib
итого 10956
-rw-r--r--. 1 ivan ivan 8182356 дек 12 15:35 libldapcpp.a
-rwxr-xr-x. 1 ivan ivan 853 дек 12 15:35 libldapcpp.la
lrwxrwxrwx. 1 ivan ivan 19 дек 12 15:35 libldapcpp.so -> libldapcpp.so.0.0.0
lrwxrwxrwx. 1 ivan ivan 19 дек 12 15:35 libldapcpp.so.0 -> libldapcpp.so.0.0.0
-rwxr-xr-x. 1 ivan ivan 3029195 дек 12 15:35 libldapcpp.so.0.0.0
Кусок Parusyncka.pro:
INCLUDEPATH += "/usr/include/oracle/12.1/client64"
INCLUDEPATH += "/usr/include"
INCLUDEPATH += "libldapcpp/include"
QMAKE_RPATHDIR += "/usr/lib/oracle/12.1/client64/lib"
QMAKE_RPATHDIR += "/media/storage/Projects/Parusyncka/libldapcpp/lib"
Если добавить в .pro файл LIBS += "-llibldapcpp", то ld говорит от том, что не может найти libldapcpp.
Соответственно три вопроса:
- ЧЯДНТ?
- Есть .a, есть .la, есть .so. Какой из них лучше использовать и как? Меня вполне устроит распространять либу вместе с приложением, ибо либы всё равно в репах нет. Никаких действий для подключения динамических библиотек не предпринимал.
- Если кинетесь ссылкой на небольшое, но понятное объяснение, как вообще все эти библиотеки подключать/использовать буду благодарен.
И последнее readelf --dyn-syms -W lib/libldapcpp.so