我爲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