Неопределенная ссылка на 'dlsym'

Я видел много подобных сообщений, но пробовал каждый трюк в книге и все еще борюсь. Все работало нормально, но после установки/удаления wireshark с некоторыми компонентами/дисселекторами все перепуталось. Я не помню точно, какие библиотеки / пакеты были удалены, но, вероятно, намного больше, чем я заметил.

если я создам простой main.cpp файл, как этот:

#include <SQLAPI.h>
int main()
{
  SAConnection con;
  return 0;
}

и

G++ main.cpp-lsqlapi -ЛПНП

это дает мне следующие сообщения об ошибках:

/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.

1 ответов


Я нашел решение; установка-Wl,--no-as-needed before-ldl новая команда компиляции

главная ССЗ.cpp-lsqlapi-lstdc++ - Wl,--no-as-needed-ldl

по-видимому, это связано с последними версиями GCC/LD по умолчанию для связывания с --as-needed.