У меня есть библиотека C ++ и приложение C ++, пытающееся использовать функции и классы, экспортированные из библиотеки. Библиотека прекрасно работает, и приложение компилируется, но не может связать. Я получаю следующие ошибки:
app-source-file.cpp :(. Text + 0x2fdb): неопределенная ссылка на `lib-namespace :: GetStatusStr (int) '
Классы в библиотеке, кажется, разрешаются компоновщиком очень хорошо, но свободные функции и экспортированные данные (например, косинусная таблица поиска) неизменно приводят к указанной ошибке.
Я использую Ubuntu 8.04 (Hardy), и он обновлен до последних пакетов Ubuntu.
Команда для связывания библиотеки (с удалением других библиотек):
g++ -fPIC -Wall -O3 -shared -Wl,-soname,lib-in-question.so -o ~/project/lib/release/lib-in-question.so
Команда для связывания приложения (с удалением других библиотек):
g++ -fPIC -Wall -O3 -L~/project/lib/release -llib-in-question -o ~/project/release/app-in-question
Наконец, кажется (насколько я могу судить), что соответствующие символы экспортируются должным образом:
nm -D ~/project/lib/release/lib-in-question.so | grep GetStatusStr --> U _ZN3lib-namespace12GetStatusStrEi