我为CentOS 6.3使用devtoolset-1.0以临时升级GCC版本。虽然我现在能够编译我的C++应用程序,最终的二进制缺少一些符号:CentOS:使用devtoolset中的GCC 4.7导致链接libstdC++不正确(未定义的符号)
$ ldd -d -r myapp
$ [..]
$ libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003216e00000)
$ [..]
$ undefined symbol: _ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_ (./myapp)
$ undefined symbol: _ZNSt8__detail15_List_node_base7_M_hookEPS0_ (./myapp)
$ undefined symbol: _ZNSt8__detail15_List_node_base9_M_unhookEv (./myapp)
我想通了,这些都是一些新的功能,这是不是在“老”的libstdC++发现,但在一个更新的libstdC++中。在我的系统上,安装了libstdC++(默认版本4.4.7)和devtoolset-1.0-libstdC++ - devel(4.7通过devtoolset)。有趣的是,从devtoolset的的libstdC++链接agains老之一:
$ cat /opt/centos/devtoolset-1.0/root/usr/lib/gcc/x86_64-redhat-linux/4.7.0/libstdc++.so
$ /* GNU ld script
$ Use the shared library, but some functions are only in
$ the static library, so try that secondarily. */
$ OUTPUT_FORMAT(elf64-x86-64)
$ INPUT (/usr/lib64/libstdc++.so.6 -lstdc++_nonshared)
什么其实我想要的是更换的libstdC++绑定,但我不知道该如何实现这个目标。我已经尝试设置LD_LIBRARY_PATH并指向devtoolset目录,但libstdC++仍然设置为旧位置。另外一个符号链接没有成功,因为它是一个ld脚本而不是实际的共享库。
你曾经找到解决这个问题的办法吗?另外,我很好奇在调试版本和发布版本中是否有不同的缺失符号,这也是我观察到的。 – 2015-06-03 15:37:52