带有g ++的未定义符号

时间:2011-03-25 17:43:41

标签: c++ unix g++ java-native-interface

我已经为asio库实现了boost的教程示例,但是通过头文件分离:

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 个答案:

答案 0 :(得分:1)

最可能的猜测是./libagent.so是使用不同的编译器/设置/环境编译的,并且名称修改不完全匹配。

答案 1 :(得分:1)

您实际上并没有链接到boost :: asio库,因此共享对象不知道在哪里可以找到您班级中使用的符号。

假设库名为boost_asio,则需要添加:

-lboost_asio

到链接线。

......划伤,完全错误。

你错过了tcp_connection :: socket的实现 - 这就是错误的来源。

也许是这句话:

tcp::socket& socket();
.h文件中的

需要阅读:

tcp::socket& socket() { return socket_; }