2011-03-25 101 views
1

我已经实现升压为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

您可以在这里把你的实际代码在这个网站。这种方式更有用。 – Tim 2011-03-25 17:45:36

+1

您是否设置了LD_LIBRARY_PATH? – 2011-03-25 17:47:08

+0

@SB:是@Tim:好吧,我认为这会代码太多 – 2011-03-25 17:50:04

回答

1

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

假设库称为boost_asio,您需要添加:

-lboost_asio 

的连接线。

......从头开始,完全错误。

你错过了tcp_connection :: socket的实现 - 这是错误来自的地方。

也许行:

tcp::socket& socket(); 

在.h文件中需要读取:

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

我找不到这个库,也不是这样命名的。 – 2011-03-25 18:09:30

+0

对不起,我认为它被称为'boost_serialization' – Petesh 2011-03-25 18:13:55

+0

原来的答案是完全不正确的。 – Petesh 2011-03-25 18:18:56

1

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