日期:2014-05-16  浏览次数:20626 次

linux so库文件调用问题
linux下调用了一个so的库
运行时提示如下
warning: libstdc++.so.5, needed by /lib/libPrintPT.so, may conflict with libstdc++.so.6
也就是说 libprint.so是libstdc++.so.5编译的,而我机器上的版本确是libstdc++.so.6

ldd test 生成的测试程序如下
linux-gate.so.1 => (0x00211000)
libdl.so.2 => /lib/libdl.so.2 (0x00c98000)
libhello.so => /lib/libhello.so (0x00322000)
libPrintPT.so => /lib/libPrintPT.so (0x00766000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x04857000)
libm.so.6 => /lib/libm.so.6 (0x00c71000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x046da000)
libc.so.6 => /lib/libc.so.6 (0x00b3c000)
/lib/ld-linux.so.2 (0x00b1f000)
libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x00d8b000)

网上查了一下,说是g++版本不一致,(gcc 4.1的,建议用gcc 3.2)于是安装了 gcc3.2
安装完毕修改Makefile文件 将g++改为g++32
告警确实没了。但是运行的时候却提示
“段错误”
ldd test如下
ldd test
  linux-gate.so.1 => (0x00929000)
  libdl.so.2 => /lib/libdl.so.2 (0x00c98000)
  libhello.so => /lib/libhello.so (0x0094a000)
  libPrintPT.so => /lib/libPrintPT.so (0x009ce000)
  libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x00475000)
  libm.so.6 => /lib/libm.so.6 (0x00c71000)
  libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x046da000)
  libc.so.6 => /lib/libc.so.6 (0x00b3c000)
  /lib/ld-linux.so.2 (0x00b1f000)
不知道是那里的问题啊?是不是我的做法有问题啊?

------解决方案--------------------
提示段错误说明你的程序访问了错误内存, 贴代码吧。
------解决方案--------------------
=。= 好吧,以前我一直偷懒ln -s libstdc++.so.6 libstdc++.so.5的...百试不爽...