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静态库时发生重复定义问题的一个案例分析和总结

from:http://blog.csdn.net/ithzhang/article/details/13170047 Background MSDN中对于在不同的配置下Link的LIB作...

转: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多线程...

在Centos上运行不同版本C++运行库的解决办法

来由:生产环境的Centos6.4,gcc 4.4.7,不支持C++11,如果全部升级gcc费劲,尝试以下办法解决 1.在centos6.4虚拟机上编译gcc5.3.0,安装在/usr/local/g...

c/c++运行库的一些问题

首先了解运行库的类型与区别        MT选项:链接LIB版的C和C++运行库。在链接时就会在将C和C++运行时库集成到程序中成为程序中的代码,程序体积会变大。   MTd选项:LIB...

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

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

vc运行库,程序出现问题不可或缺

  • 2012年12月20日 14:26
  • 16.37MB
  • 下载

delphi 2007 运行库[多版本]

  • 2013年04月23日 11:18
  • 518KB
  • 下载

用 VC2012 产生脱离VC运行库的 C/C++ 程序

最近在研究如何使一个VC编译的程序脱离VC运行库,也就是msvcrXX.dll。查了许多资料,最后确定了两篇可参考文章,不过都是以VC2010为开发环境的,而我用的是VC2012,和他们的有所不同。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++运行库版本问题
举报原因:
原因补充:

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