[問題] clang++編譯時發生錯誤

作者: x049 (joker)   2015-03-30 17:36:01
先提供linux版本為:Linux Mint 17 Qiana
小弟目前在做專題中需要用到字串轉成點陣圖印出,故參考以下網頁
https://github.com/descent/progs/tree/master/cpp11_utf8
為了能編譯,照著以下網頁步驟安裝了clang與libc++
http://www.cnblogs.com/codemood/p/3142848.html
有先編譯hello world,順利的成功了也能執行
clang++ -g -stdlib=libc++ -std=c++11 -I/usr/include/c++/v1/
-I/usr/include/c++/v1/include/ `freetype-config
作者: lantw44 (#######################)   2015-03-30 22:37:00
編 main1.o 的時候有加 -stdlib=libc++ 嗎?
作者: kenduest (小州)   2015-03-30 22:58:00
hello 程式碼編譯要兩行似乎多此一舉clang++ -o main1 main.cppp ..... 不就可以了 ?若你沒有其他特殊多個程式碼要編譯,不需要 -c 然後分開http://i.imgur.com/nV5c9Ga.png另外你的問題我比較想知道的是,你編譯一般的 c++ 程式能夠正常工作嗎?
作者: x049 (joker)   2015-03-30 23:51:00
我是因為這個程式才去裝linux ,還是新手看不太懂指令編譯k大說的編譯一般c++程式是說用上面clang++指令編譯嗎?
作者: kenduest (小州)   2015-03-31 00:00:00
這樣說好了,原本沒有修改的版本,你可以正常編譯嗎是的,用 clang++ 編譯一般的 c++ code
作者: x049 (joker)   2015-03-31 00:08:00
我試過只要有用到 -stdlib=libc++ 就會跳出一樣的錯誤用c++版本的hello world也會跳出錯誤
作者: lantw44 (#######################)   2015-03-31 00:14:00
有點好奇是為了什麼功能才裝 libc++ 的嗎?
作者: x049 (joker)   2015-03-31 00:18:00
在 wstring2utf8.h 裡有個<codecvt> 好像只有clang libc++有k大的那張圖我有照著編譯,第一個原版的編譯跳出了好幾行未參考定義到,第二個編譯結果錯誤碼與圖上的差不多第3個結果跟第一個一樣跳出好幾行未參考定義到
作者: lantw44 (#######################)   2015-03-31 00:27:00
用 clang++ -v 看看 #include 搜尋路徑感覺可能他先搜到 libstdc++ 的了
作者: x049 (joker)   2015-03-31 00:35:00
https://mega.co.nz/#!c4kxTLKK!VP3L-bZwvyTcRAeld1_OvYC3flX8xX6MLk9FfmpPSeQ 這是我clang++ -v的結果
作者: lantw44 (#######################)   2015-03-31 00:39:00
clang++ -v 後面接本來拿來編譯的參數-I 那些也都要,真的有編譯東西它才會顯示搜尋路徑
作者: x049 (joker)   2015-03-31 00:51:00
https://mega.co.nz/#!10tG0TzR!8AQVN4o51u-CynUN3VjDTRH6i9DgEMfM41obJ6bjl2A 結果很長 所以就上傳txt檔
作者: sunneo (艾斯寇德)   2015-03-31 00:52:00
因為codecvt不在標準內,你該考慮boost的utf_to_utf
作者: x049 (joker)   2015-03-31 00:58:00
如果使用boost的utf_to_utf是單純更動wstring2utf8.h檔嗎?
作者: lantw44 (#######################)   2015-03-31 01:25:00
剛看到 gcc 5 已經有 codecvt 了,可以嘗試看看http://libcxx.llvm.org/ 有說在 Linux 可能要多加參數
作者: x049 (joker)   2015-03-31 01:44:00
看不太懂要加哪些參數我打了 clang++ -o main1 main1.cpp -stdlib=libc++ hellowod.cpp -nodefaultlibs -lc++ -lc++abi -lm -lc -lgcc_s -lgcc 但出現找不到-lc++abi 上面那個helloworld.cpp多打的
作者: kenduest (小州)   2015-03-31 02:54:00
為何你要加上 -nodefaultlibs 這個參數 @@
作者: x049 (joker)   2015-03-31 02:56:00
我看不太懂,照網頁上的參數打在Using libc++ in your programs的linux下有兩種我是參考那個的
作者: kenduest (小州)   2015-03-31 03:08:00
沒關係,一般不用,不過你後面有指定其他的 lib 就還好另外感覺你這程式好像搞很久了...我這邊測試過都是在 mac os x 環境,clang 本身沒問題clang 是 xcode 提供的,都可以正確編譯
作者: lantw44 (#######################)   2015-03-31 03:09:00
我在 FreeBSD 測試,clang 預設用 libc++ 也很正常
作者: kenduest (小州)   2015-03-31 03:10:00
boost 有替代方案,程式碼簡單改一下就好只是重點你系統還需要有一份 boost
作者: x049 (joker)   2015-03-31 03:10:00
主要都卡在linux跟clang++才編譯不過去吧,main的程式碼倒是讀懂了
作者: kenduest (小州)   2015-03-31 03:20:00
這樣吧.. 我剛剛幫你改一下改用 boosthttp://x.co/8f16Z 這是那個 wstring2utf8.h 檔案內容記得你應該會用 apt-get install 裝上 boost 相關套件我這邊是裝上 libboost1.55-dev 就可以了
作者: x049 (joker)   2015-03-31 03:23:00
感謝大大,小弟正在安裝boost中,想問編譯時需要怎麼下指令呢
作者: kenduest (小州)   2015-03-31 03:27:00
忘記說還要裝 libboost 這個 lib, 上面那是標頭檔案最後 -l 不要忘記加上像是: -lboost_thread結論我這邊 apt 裝上 libboost1.55-dev libboost1.55都懶用 mac os x or freebsd 應該也是解法 XD
作者: x049 (joker)   2015-03-31 05:13:00
終於成功了,感謝大大,小弟在這裡linux跟clang卡好久了

Links booklink

Contact Us: admin [ a t ] ucptt.com