Я видел много подобных постов, но попробовал каждый трюк в книге и все еще борюсь. Все работало нормально, но после установки / удаления wireshark с некоторыми компонентами / рассеивателями все это испортилось. Я не помню точно, какие библиотеки / пакеты были удалены, но, вероятно, намного больше, чем я заметил.
Если я создам простой файл main.cpp, как этот:
#include <SQLAPI.h>
int main()
{
SAConnection con;
return 0;
}
и попробовать
g ++ main.cpp -lsqlapi -ldl
это дает мне следующие сообщения об ошибках:
/usr/local/lib/libsqlapi.so: undefined reference to `dlsym'
/usr/local/lib/libsqlapi.so: undefined reference to `dlerror'
/usr/local/lib/libsqlapi.so: undefined reference to `dlopen'
/usr/local/lib/libsqlapi.so: undefined reference to `dlclose'
collect2: error: ld returned 1 exit status
Я попытался поставить -ldl перед -lsqlapi, так как некоторые предположили, что порядок важен. Если я использую gcc вместо g ++, ошибка:
/usr/bin/ld: /tmp/ccwBI4tj.o: undefined reference to symbol '__gxx_personality_v0@@CXXABI_1.3'
/usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Я могу скомпилировать и запустить файл, если SAConnection удаляется.
Я не думаю, что это имеет какое-либо отношение к SQLAPI, потому что у меня возникают похожие проблемы с libboost. У меня нет небольшого примера кода, но когда я компилирую проект, который был успешно скомпилирован на прошлой неделе, я получаю ошибку:
/usr/bin/ld: debug/components/helloworld/HelloWorld.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/usr/lib/x86_64-linux-gnu/libboost_system.so.1.53.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
В этом проекте используется Makefile, который не изменился, поэтому в моей системе должно быть что-то неправильное. Я попытался переустановить build-essential.
Использование Ubuntu 64 бит 13.10 с g ++ версии 4.8.1.
Я нашел решение; установка -Wl, — no-as-Необходимый перед -ldl Новая команда компиляции
gcc main.cpp -lsqlapi -lstdc ++ -Wl, — по мере необходимости -ldl
По-видимому, это связано с последними версиями gcc / ld по умолчанию для связи с —as-required.
Других решений пока нет …