免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2147 | 回复: 1
打印 上一主题 下一主题

编译报错Undefined symbol_不知道如何入手 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-31 16:34 |只看该作者 |倒序浏览
相同的基础库源代码, 在A主机上编译生成了一个基础库 libCbsSysClassD.so, 在B主机上链接该库时报错:
ld: 0711-317 ERROR: Undefined symbol: .CBSDate::CBSDate(int,int,int)


但把基础库源代码拿到B主机上重新生成一次 libCbsSysClassD.so, 该最新生成的库却又可以链接成功了.

从A主机取回的库我用nm指令看了一下:
ocsqa$nm libCbsSysClassD.so | grep "CBSDate::CBSDate"
.CBSDate::CBSDate()  T      246948          80
.CBSDate::CBSDate(const char*) T      248680         236
.CBSDate::CBSDate(const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&,const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&) T      247320         268
.CBSDate::CBSDate(int,int,int) T      247028         128
CBSDate::CBSDate()   -           0
CBSDate::CBSDate()   D       43600          12
CBSDate::CBSDate(const char*) -        1732
CBSDate::CBSDate(const char*) D       43660          12
CBSDate::CBSDate(const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&,const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&) -         372
CBSDate::CBSDate(const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&,const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&) D       43636          12
CBSDate::CBSDate(int,int,int) -          80
CBSDate::CBSDate(int,int,int) D       43612          12



B主机上重新用源代码编译生成的so库我也用 nm指令看了一下:
ocsqa$nm libCbsSysClassD.so | grep "CBSDate::CBSDate"
.CBSDate::CBSDate()  T      131300          80
.CBSDate::CBSDate(const char*) T      133036         236
.CBSDate::CBSDate(const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&,const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&) T      131676         268
.CBSDate::CBSDate(int,int,int) T      131380         132
CBSDate::CBSDate()   -           0
CBSDate::CBSDate()   D       43916          12
CBSDate::CBSDate(const char*) -        1736
CBSDate::CBSDate(const char*) D       43976          12
CBSDate::CBSDate(const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&,const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&) -         376
CBSDate::CBSDate(const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&,const std::basic_string<char,std::char_traits<char>,std::allocator<char> >&) D       43952          12
CBSDate::CBSDate(int,int,int) -          80
CBSDate::CBSDate(int,int,int) D       43928          12
ocsqa$




看起来好像都有 CBSDate::CBSDate(int,int,int) 这样的符号, 据说这种问题往往是由于编译器或者主机环境版本微有不同造成的. 请高人给解释一下怎样看两个 so 库的哪些不同导致了编译报错.

论坛徽章:
0
2 [报告]
发表于 2007-09-11 16:39 |只看该作者

问题已经解决

出现该问题的原因在于编译器.

6.0.0.0与6.0.0.12两个小版本之间的细微区别导致的.

将编译器回退到比较低的版本后问题解决.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP