[問題] devtoolset linking問題
開發平台(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++ --std=c++11 test.cpp -o test
# ldd test
linux-gate.so.1 => (0x003ce000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00ea7000)
libm.so.6 => /lib/libm.so.6 (0x0047f000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x002ca000)
libc.so.6 => /lib/libc.so.6 (0x009f4000)
/lib/ld-linux.so.2 (0x00331000)
例如可以看到連結到的是 /usr/lib/libstdc++.so.6
而不是 /opt/rh/devtoolset-2/(中略)/libstdc++.so
而事實上這樣編譯出來的程式還是可以正常執行並得到預期的輸出
讓我覺得很疑惑
難道gcc不需要搭配相應版本的libstdc++.so嗎?
是因為我使用到的c++11 feature只會在編譯階段做掉,跟連結無關嗎?
所有的c++11 feature都是如此嗎? 還是只是我挑到不會出錯的例子?
程式碼(Code):
直接用cplusplus裡面的範例程式來測試
http://www.cplusplus.com/reference/regex/regex_match/
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.65.124
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1529551713.A.E45.html
→
06/21 14:38,
7年前
, 1F
06/21 14:38, 1F
→
06/21 15:04,
7年前
, 2F
06/21 15:04, 2F
→
06/21 15:04,
7年前
, 3F
06/21 15:04, 3F
→
06/21 15:07,
7年前
, 4F
06/21 15:07, 4F
→
06/21 15:08,
7年前
, 5F
06/21 15:08, 5F
→
06/21 15:10,
7年前
, 6F
06/21 15:10, 6F
→
06/21 15:12,
7年前
, 7F
06/21 15:12, 7F
→
06/21 15:14,
7年前
, 8F
06/21 15:14, 8F
→
06/21 15:23,
7年前
, 9F
06/21 15:23, 9F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章