当前位置: 技术问答>linux和unix
程序连接时出错,请大侠指点
来源: 互联网 发布时间:2015-04-13
本文导语: 我编译了两个库libpt.so 和libopent120.so,其中libopent120.so是依赖libpt.so 编译出来的。(这是t120协议)不过在连接一个应用程序时 cc -o tools/simple/obj_linux_x86_d/SimpleConnect tools/simple/obj_linux_x86_d/simple_connect.o -L/usr/lib -lpt -ldl -...
我编译了两个库libpt.so 和libopent120.so,其中libopent120.so是依赖libpt.so 编译出来的。(这是t120协议)不过在连接一个应用程序时
cc -o tools/simple/obj_linux_x86_d/SimpleConnect tools/simple/obj_linux_x86_d/simple_connect.o -L/usr/lib -lpt -ldl -lpthread -L./lib_linux_x86_d -lopent120 -lstdc++
出现了很多错误(编译没问题),如:
tools/simple/obj_linux_x86_d/simple_connect.o(.text+0xad): In function `SimpleT120::SimpleT120[not-in-charge]()':
include/t123/TransportListener.h:62: undefined reference to `PString::PString[in-charge]()'
tools/simple/obj_linux_x86_d/simple_connect.o(.text+0xc1):include/t123/TransportListener.h:62: undefined reference to `PString::PString[in-charge]()'
tools/simple/obj_linux_x86_d/simple_connect.o(.text+0x171): In function `SimpleT120::SimpleT120[in-charge]()':
tools/simple/simple_connect.cpp:96: undefined reference to `PString::PString[in-charge]()'
./lib_linux_x86_d/libopent120.so: undefined reference to `PString::PString[not-in-charge]()'
./lib_linux_x86_d/libopent120.so: undefined reference to `PString::PString[not-in-charge](PString const&)'
其实,这些函数都是有定义的,只是在libpt.so 里,请教!!
还有就是,它怎么指明说在某个头文件(如include/t123/TransportListener.h)里没有定义什么东东,为什么而不是其他的头文件' ,
|
把-lopent120放到-lpt前边试试。
|
不好意思,刚注意到你是用C去连接C++库,这样是不行的,因为C++编译器对函数名进行了mangle,而C编译器是不会这样做的,所以同样的函数声明在C++里和C里编译出的符号是不同的,不能直接调用。
两个办法:
1、都用C++
2、库里要输出的函数用export "C"声明和定义。不过看你的应用,这个方法应该不合适。
两个办法:
1、都用C++
2、库里要输出的函数用export "C"声明和定义。不过看你的应用,这个方法应该不合适。