C++运行库版本问题

原创 2011年01月07日 16:32:00

问题描述:

  1. 编译时没有问题,成功编译目标文件arrowpig
  2. 程序启动时,系统报错:

ld.so.1: arrowpig: fatal: relocation error: file /view/jianxu1_arrowpig/vobs/Voyager/framework/arrowpig: symbol _ZNSs4_Rep26_M_set_length_and_sharableEj: referenced symbol not found

Program terminated with signal SIGKILL, Killed.

 

问题解决步骤:

-bash-3.00$ gc++filt _ZNSs4_Rep26_M_set_length_and_sharableEj
std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_M_set_length_and_sharable(unsigned int)

std::string, 我们基本确定这是C++运行库内的符号,在Solaris下,C++的运行库为libstdc++.so。

 

检查一下我的应用程序在运行时所加载的C++运行库:

-bash-3.00$ ldd arrowpig | grep libstdc++
        libstdc++.so.6 =>        /usr/sfw/lib/libstdc++.so.6

-bash-3.00$ nm /usr/sfw/lib/libstdc++.so.6 | grep _ZNSs4_Rep26_M_set_length_and_sharableEj
-bash-3.00$

可见,应用程序默认加载的c++运行库中没有_ZNSs4_Rep26_M_set_length_and_sharableEj这个符号。但是为什么编译的时候是对的呢,所以现在的推测就是编译的时候所使用的路径和运行时不一致,gcc中使用 -L 来制定运行库路径。

 

 

-bash-3.00$ grep ‘-L’ Makefile

然后我找到了 -L${VOYAGER_ROOT}/lib/${PLATFORM},接着我在/view/jianxu1_arrowpig/vobs/Voyager/lib/x86目录下果然找到了另一个libstdc++.so.6

 

-bash-3.00$ pwd
/view/jianxu1_arrowpig/vobs/Voyager/lib/x86

-bash-3.00$ nm libstdc++.so.6 | grep _ZNSs4_Rep26_M_set_length_and_sharableEj
[9485]  |    604360|      44|FUNC |WEAK |0    |2010   |_ZNSs4_Rep26_M_set_length_and_sharableEj

找到了!

 

于是我手工运行:

-bash-3.00$ export LD_LIBRARY_PATH=/view/jianxu1_arrowpig/vobs/Voyager/lib/x86:$LD_LIBRARY_PATH

-bash-3.00$ ldd arrowpig | grep libstdc++
        libstdc++.so.6 =>        /view/jianxu1_arrowpig/vobs/Voyager/lib/x86/libstdc++.so.6

 

再启动arrowpig, 应用程序正确启动了。

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结

Background MSDN中对于在不同的配置下Link的LIB作了说明: C Runtime Library: 开关 对应的库 版本 ...

VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结

Background MSDN中对于在不同的配置下Link的LIB作了说明: C Runtime Library: 开关 对应的库 版本 /...

VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结

Background MSDN中对于在不同的配置下Link的LIB作了说明: C Runtime Library: 开关 对应的库 版本 /...

VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结

VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结 2007-12-14 19:07 1019人阅读 评论(0) 收藏 举报 Background MS...

转:VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结

MSDN中对于在不同的配置下Link的LIB作了说明:C Runtime Library:开关对应的库版本/MDMSVCRT.LIB多线程DLL的Release版本/MDdMSVCRTD.LIB多线程...

转:VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结

MSDN中对于在不同的配置下Link的LIB作了说明:C Runtime Library:开关对应的库版本/MDMSVCRT.LIB多线程DLL的Release版本/MDdMSVCRTD.LIB多线程...

VC调试版本C运行库内存申请的一个bug(转)

遇到过一个通信方面的软件,需要长期运行,做压力测试时,高负荷连续运行一定天数时必定崩溃,而且都是在msvcrtd.dll中崩溃。负责维护的人百思不得其解,就去问微软的人,结果微软的人说这是VC6带的m...
  • hazy
  • hazy
  • 2011-05-23 23:06
  • 1538

delphi 2007 运行库[多版本]

  • 2013-04-23 11:18
  • 518KB
  • 下载

你所不知道的C和C++运行库

你所不知道的C和C++运行库   在使用VC构建项目时,经常会遇到下面的链接错误:   初学者面对这些错误常常不知所错:libcmt.lib是什么东西?msvcrtd....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)