我已经为asio库实现了boost的教程示例,但是通过头文件分离:
我使用另一个.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没有让我失去依赖。
答案 0 :(得分:1)
最可能的猜测是./libagent.so
是使用不同的编译器/设置/环境编译的,并且名称修改不完全匹配。
答案 1 :(得分:1)
您实际上并没有链接到boost :: asio库,因此共享对象不知道在哪里可以找到您班级中使用的符号。
假设库名为boost_asio,则需要添加:
-lboost_asio
到链接线。
......划伤,完全错误。
你错过了tcp_connection :: socket的实现 - 这就是错误的来源。
也许是这句话:
tcp::socket& socket();
.h文件中的需要阅读:
tcp::socket& socket() { return socket_; }