C++ 带有g+的未定义符号+;
我已经为asio库实现了boost的教程示例,但是通过头文件进行了分离: 我以以下方式使用另一个.cpp文件构建这两个文件:C++ 带有g+的未定义符号+;,c++,unix,g++,java-native-interface,C++,Unix,G++,Java Native Interface,我已经为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:
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没有提供依赖项缺失。最有可能的猜测是
/libagent。因此
是使用不同的编译器/设置/环境编译的,名称mangling并不完全匹配。您实际上没有链接到boost::asio库,因此,共享对象不知道在哪里可以找到类中使用的符号
假设库名为boost_asio,则需要添加:
-lboost_asio
连接到连接线
。。。划破它,完全错了
您缺少tcp_connection::socket的实现,这就是错误的来源
也许这句话:
tcp::socket& socket();
在.h文件中,需要读取:
tcp::socket& socket() { return socket_; }
你可以把你的实际代码放在这个网站上。这样更有用。你设置了LD_LIBRARY_路径了吗?@SB:yes@Tim:ok,我想这会太多代码我找不到这个库,也不是这样命名的。对不起,我想这叫做“boost_序列化”。有几个依赖项:boost_线程,boost_序列化,等等。添加它们并不会改变我在asio库中已经使用过的错误,但代码是教程中的1:1。由于我对头文件和源文件使用了单独的文件,所以错误不断发展