Неопределенный символ с g ++ - PullRequest
1 голос
/ 25 марта 2011

Я реализовал учебный пример boost для библиотеки asio, но с разделением через заголовочный файл:

server.cpp

server.h

Я создаю оба файла с другим файлом .cpp следующим образом:

g++ -I/usr/lib/jvm/java-6-openjdk/include -L/usr/local/lib -fPIC  -lboost_system -shared -o libagent.so agent.cpp server.cpp 

При использовании скомпилированной библиотеки, я получаю:

java: symbol lookup error: ./libagent.so: undefined symbol: _ZN14tcp_connection6socketEv

В чем причина этой ошибки? ldd -d не пропускает ни одной зависимости.

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Вы на самом деле не ссылаетесь на библиотеку boost :: asio, поэтому общий объект не знает, где найти символ, который используется в вашем классе.

при условии, что библиотека называется boost_asio, вам нужно добавить:

-lboost_asio

к линии связи.

... поцарапайте это, совершенно неправильно.

Вам не хватает реализации сокета tcp_connection :: - отсюда и ошибка.

возможно, строка:

tcp::socket& socket();

в файле .h необходимо прочитать:

tcp::socket& socket() { return socket_; }
1 голос
/ 25 марта 2011

Наиболее вероятное предположение состоит в том, что ./libagent.so был скомпилирован с другим компилятором / настройками / средой, и искажение имени не совсем совпадает.

...