程序连接时出错,请大侠指点

asiaas 2003-08-22 09:42:30

我编译了两个库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)里没有定义什么东东,为什么而不是其他的头文件' ,
...全文
41 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
asiaas 2003-09-02
  • 打赏
  • 举报
回复
问题解决了,但是我还是不知道为什么。本来关于pwlib库有两个版本debug和release,开始时用的是release版本,后来改为debug的就可以了
asiaas 2003-08-25
  • 打赏
  • 举报
回复
cc -c -o tools/simple/obj_linux_x86_d/simple_connect.o -pipe -fPIC -Wall -g -DP_LINU -D_DEBUG -DPTRACING=1 -D_REENTRANT -DPHAS_TEMPLATES -DPMEMORY_CHECK=1 -Itools/simple -I/home/project/pwlib/include/ptlib/unix -I/home/project/pwlib/include -I./include tools/simple/simple_connect.cpp

cc -o tools/simple/obj_linux_x86_d/SimpleConnect tools/simple/obj_linux_x86_d/simple_connect.o -L/home/project/pwlib/lib -lpt -ldl -lpthread -L./lib_linux_x86_d -lopent120 -lstdc++

编译是没有问题的

zeng_xiangyang 2003-08-24
  • 打赏
  • 举报
回复
extern PString::PString试一下
fierygnu 2003-08-23
  • 打赏
  • 举报
回复
没明白,为什么要用gcc,都用g++才行。
bit7 2003-08-23
  • 打赏
  • 举报
回复
PString::PString 在哪里有定义,
使用-L编译参数带上该类型定义的库文件看看
asiaas 2003-08-23
  • 打赏
  • 举报
回复
就是还有错误,而且是一样的错误
fierygnu 2003-08-22
  • 打赏
  • 举报
回复
把-lopent120放到-lpt前边试试。
asiaas 2003-08-22
  • 打赏
  • 举报
回复
两个库都是用gnuc++编译器编译的。你说的c++文件用c编译器编译,我觉得很有道理。我这里我用g++,gcc各连接一次,结果错误居然是一样的
fierygnu 2003-08-22
  • 打赏
  • 举报
回复
你的两个库是用什么编译器编译的?你给出的cc是用了连接的,编译也要用C++。所有的库和应用都要用同一种C++编译器(因为mangle没有标准,不同的编译器有不同的方法)。
asiaas 2003-08-22
  • 打赏
  • 举报
回复
还有就是出现某个函数(在某个头文件里)没定义,我想不通,它凭什么指定那个头文件,而不是别的
asiaas 2003-08-22
  • 打赏
  • 举报
回复
不知道你所说的是不是把cc改为 g++,这样就调用c++编译器,我改了一下,没什么好转,还是那么多错误
fierygnu 2003-08-22
  • 打赏
  • 举报
回复
不好意思,刚注意到你是用C去连接C++库,这样是不行的,因为C++编译器对函数名进行了mangle,而C编译器是不会这样做的,所以同样的函数声明在C++里和C里编译出的符号是不同的,不能直接调用。
两个办法:
1、都用C++
2、库里要输出的函数用export "C"声明和定义。不过看你的应用,这个方法应该不合适。
asiaas 2003-08-22
  • 打赏
  • 举报
回复
试了的,我还在-lopent120后面多加了-lpt,都没有解决问题

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧