看板 Linux 關於我們 聯絡資訊
先提供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 --cflags` -Wall -W -I. -c hello.cpp clang++ -o hello hello.o -stdlib=libc++ -std=c++11 -I/usr/include/c++/v1/ -I/usr/include/c++/v1/include/ `freetype-config --libs` 在把字串轉點陣圖的main.cpp轉.o檔時跳出兩個警告,說有兩個變數沒在程式碼裡調用到 (我認為是沒有影響) main1.cpp:76:6: warning: unused variable 'starty' [-Wunused-variable] int starty = pen_y; ^ main1.cpp:75:6: warning: unused variable 'startx' [-Wunused-variable] int startx = pen_x; //startx與 starty需定義 ... ^ 2 warnings generated. 在把.o檔轉成執行檔時跳出錯誤: xxs4129-Aspire-5750G xxs4129 # clang++ -o main1 main1.o -stdlib=libc++ -std=c++11 -I/usr/include/c++/v1/ -I/usr/include/c++/v1/include/ `freetype-config --libs` /usr/bin/ld: main1.o: undefined reference to symbol '__cxa_free_exception@@CXXABI_1.3' //usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line clang: error: linker command failed with exit code 1 (use -v to see invocation) 有去google過但還是看不懂如何解決 這是我用的 main1.cpp 跟原本的一樣只是自己為了讀懂多了蠻多註解 https://mega.co.nz/#!x4lR3Y6K!L8_Z5PmLnd_yYhewgQy1FZPsaDmU0MwqfUbffJs1wxQ 還請各位大大有空能幫忙看一下 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 124.6.19.51 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1427708166.A.FBA.html x049:轉錄至看板 C_and_CPP 03/30 20:01
lantw44: 編 main1.o 的時候有加 -stdlib=libc++ 嗎? 03/30 22:37
kenduest: hello 程式碼編譯要兩行似乎多此一舉 03/30 22:58
kenduest: clang++ -o main1 main.cppp ..... 不就可以了 ? 03/30 23:02
kenduest: 若你沒有其他特殊多個程式碼要編譯,不需要 -c 然後分開 03/30 23:03
kenduest: http://i.imgur.com/nV5c9Ga.png 03/30 23:08
kenduest: 另外你的問題我比較想知道的是,你編譯一般的 c++ 程式 03/30 23:22
kenduest: 能夠正常工作嗎? 03/30 23:23
x049: 我是因為這個程式才去裝linux ,還是新手看不太懂指令編譯 03/30 23:51
x049: k大說的編譯一般c++程式是說用上面clang++指令編譯嗎? 03/30 23:53
kenduest: 這樣說好了,原本沒有修改的版本,你可以正常編譯嗎 03/31 00:00
kenduest: 是的,用 clang++ 編譯一般的 c++ code 03/31 00:01
x049: 我試過只要有用到 -stdlib=libc++ 就會跳出一樣的錯誤 03/31 00:08
x049: 用c++版本的hello world也會跳出錯誤 03/31 00:11
lantw44: 有點好奇是為了什麼功能才裝 libc++ 的嗎? 03/31 00:14
x049: 在 wstring2utf8.h 裡有個<codecvt> 好像只有clang libc++有 03/31 00:18
x049: k大的那張圖我有照著編譯,第一個原版的編譯跳出了好幾行 03/31 00:23
x049: 未參考定義到,第二個編譯結果錯誤碼與圖上的差不多 03/31 00:24
x049: 第3個結果跟第一個一樣跳出好幾行未參考定義到 03/31 00:26
lantw44: 用 clang++ -v 看看 #include 搜尋路徑 03/31 00:27
lantw44: 感覺可能他先搜到 libstdc++ 的了 03/31 00:27
x049: X8xX6MLk9FfmpPSeQ 這是我clang++ -v的結果 03/31 00:36
lantw44: clang++ -v 後面接本來拿來編譯的參數 03/31 00:39
lantw44: -I 那些也都要,真的有編譯東西它才會顯示搜尋路徑 03/31 00:47
x049: DgEMfM41obJ6bjl2A 結果很長 所以就上傳txt檔 03/31 00:51
sunneo: 因為codecvt不在標準內,你該考慮boost的utf_to_utf 03/31 00:52
x049: 如果使用boost的utf_to_utf是單純更動wstring2utf8.h檔嗎? 03/31 00:58
lantw44: 剛看到 gcc 5 已經有 codecvt 了,可以嘗試看看 03/31 01:25
lantw44: http://libcxx.llvm.org/ 有說在 Linux 可能要多加參數 03/31 01:31
x049: 看不太懂要加哪些參數 03/31 01:44
x049: 我打了 clang++ -o main1 main1.cpp -stdlib=libc++ hellowo 03/31 02:35
x049: d.cpp -nodefaultlibs -lc++ -lc++abi -lm -lc -lgcc_s -lgc 03/31 02:36
x049: c 但出現找不到-lc++abi 上面那個helloworld.cpp多打的 03/31 02:38
kenduest: 為何你要加上 -nodefaultlibs 這個參數 @@ 03/31 02:54
x049: 我看不太懂,照網頁上的參數打 03/31 02:56
x049: 在Using libc++ in your programs的linux下有兩種 03/31 02:59
x049: 我是參考那個的 03/31 02:59
kenduest: 沒關係,一般不用,不過你後面有指定其他的 lib 就還好 03/31 03:08
kenduest: 另外感覺你這程式好像搞很久了... 03/31 03:08
kenduest: 我這邊測試過都是在 mac os x 環境,clang 本身沒問題 03/31 03:08
kenduest: clang 是 xcode 提供的,都可以正確編譯 03/31 03:08
lantw44: 我在 FreeBSD 測試,clang 預設用 libc++ 也很正常 03/31 03:09
kenduest: boost 有替代方案,程式碼簡單改一下就好 03/31 03:10
kenduest: 只是重點你系統還需要有一份 boost 03/31 03:10
x049: 主要都卡在linux跟clang++才編譯不過去吧,main的程式碼倒是 03/31 03:10
x049: 讀懂了 03/31 03:11
kenduest: 這樣吧.. 我剛剛幫你改一下改用 boost 03/31 03:20
kenduest: http://x.co/8f16Z 這是那個 wstring2utf8.h 檔案內容 03/31 03:21
kenduest: 記得你應該會用 apt-get install 裝上 boost 相關套件 03/31 03:21
kenduest: 我這邊是裝上 libboost1.55-dev 就可以了 03/31 03:22
x049: 感謝大大,小弟正在安裝boost中,想問編譯時需要怎麼下指令呢 03/31 03:23
kenduest: 忘記說還要裝 libboost 這個 lib, 上面那是標頭檔案 03/31 03:27
kenduest: 最後 -l 不要忘記加上像是: -lboost_thread 03/31 03:31
kenduest: 結論我這邊 apt 裝上 libboost1.55-dev libboost1.55 03/31 03:32
kenduest: 都懶用 mac os x or freebsd 應該也是解法 XD 03/31 03:33
x049: 終於成功了,感謝大大,小弟在這裡linux跟clang卡好久了 03/31 05:13