[問題] devtoolset linking問題

作者: shadow0326 (非議)   2018-06-21 11:28:29
開發平台(Platform): (Ex: Win10, Linux, ...)
CentOS 6
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
devtoolset-2的gcc
問題(Question):
CentOS 6系統預設的gcc版本是4.4.7,過於老舊,許多c++11 feature都不支援
為了使用比較新的功能,所以我安裝了devtoolset
devtoolset-2的gcc版本是4.8.2
當我利用devtoolset來編譯一些4.4.7無法編譯,但是4.8.2可以編譯的code之後
(例如 std::regex_match 在 4.4.7 不支援)
發現編譯出來的執行檔連結到的仍然是系統預設的lib
# /opt/rh/devtoolset-2/root/usr/bin/g++
作者: shadow0326 (非議)   2018-06-21 14:38:00
後來想了一下,應該是有static link到.a檔
作者: sarafciel (Cattuz)   2018-06-21 15:04:00
所有的template都是在編譯期生成真正的code反過來說 template除非有做特化 不然不會編在.so裡面回到std::regex_match,它實際上是template function所以libstdc++並不包含它的實作(實際上也沒辦法)而它的code是寫在regex.h跟regex.tcc裡面所以應該是你用到的feature在編譯階段做掉了如果要測沒換++11會炸掉的情況 我記得std::thread可以
作者: shadow0326 (非議)   2018-06-21 15:23:00
我懂了,非常感謝,剛試了std::thread的確會seg fault

Links booklink

Contact Us: admin [ a t ] ucptt.com