看板 C_and_CPP 關於我們 聯絡資訊
照官方說明抓好code. 目前我編的版本是 LLVM/clang 3.3 clang的code要被放在 llvm-src/tools/clang/ 下面. 我的環境用 MinGW 及 gcc (GCC) 4.7.2, mingw32-make 3.82.90, i686-pc-mingw32 然後另外在外面建一個空資料夾拿來編東西, 例如就叫 llvm-build 加入 compiler default search path llvm預設搜尋路徑是 hard-coded, 若 MinGW 安裝的位置不是預設的 C:\MinGW 或版本太新(如4.7.2)要改 llvm-src/tools/clang/lib/Frontend/InitHeaderSearch.cpp http://stackoverflow.com/questions/6525245/getting-clang-to-work-on-windows 搜尋找到寫 // FIXME: temporary hack: hard-coded paths. 的地方, 往下拉找到 MinGW 的部份, 手動加入用的版本&路徑, 例如: void InitHeaderSearch::AddDefaultCPlusPlusIncludePaths(const llvm::Triple &triple, const HeaderSearchOptions &HSOpts) { llvm::Triple::OSType os = triple.getOS(); // FIXME: temporary hack: hard-coded paths. ... switch (os) { case llvm::Triple::MinGW32: // mingw-w64 C++ include paths (i686-w64-mingw32 and x86_64-w64-mingw32) AddMinGW64CXXPaths(HSOpts.ResourceDir, "4.5.0"); AddMinGW64CXXPaths(HSOpts.ResourceDir, "4.5.1"); ...(略) + AddMinGW64CXXPaths(HSOpts.ResourceDir, "4.7.2"); // mingw.org C++ include paths AddMinGWCPlusPlusIncludePaths("/mingw/lib/gcc", "mingw32", "4.5.2"); //MSYS #if defined(_WIN32) AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.6.2"); AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.6.1"); ...(略) AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.3.0"); + AddMinGWCPlusPlusIncludePaths("c:/compilers/MinGW/lib/gcc", "mingw32", "4.7.2"); #endif 使用 cmake 做配置. (根本懶人包 XD) 在 llvm-build 下用 cmake PATH-TO-LLVM-SOURCE 來自動偵測環境 & 產生 Makefile 中間可以設一些自己的參數, 例如 -DCMAKE_BUILD_TYPE:STRING=Release 之類 我還有指定 -DLLVM_TARGETS_TO_BUILD:STRING=X86 -G "MinGW Makefiles" 及安裝路徑, -DCMAKE_INSTALL_PREFIX:PATH=PATH-TO-INSTALL-LLVM 真正重要的是因為 MinGW32 的 bug, address rellocation非常慢. 若要 避開這個問題可以用 static linkage http://stackoverflow.com/questions/15310996/clang-slow-startup-using-mingw -DCMAKE_EXE_LINKER_FLAGS=-static -DCMAKE_MODULE_LINKER_FLAGS=-static 編譯 剩下就是沒什麼問題的 mingw32-make mingw32-make check-all mingw32-make install 另, 編譯時也可以指定要開 optimization, 如 mingw32-make ENABLE_OPTIMIZED=1 因為我們用 Windows 的 command line, 測試時有一些 case 會 fail (諸如 "Command not found: echo") 不過用 MSYS 的話 grep, find, diff, etc都有所以多數測資可以過 後記 C++ 程式仍然不能正確的動(with clang++), 一跑就噴 exception 搜尋的時候發現有別人遇到一樣的狀況 http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-June/050837.html 然而這是去年的事了。同樣去年時有人測試 http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-April/021027.html "I try to build Clang for windows with MinGW[1]. I build Clang using gcc-4.6.3[2]. All the programs which are built using it, are compiled and work successfully. But if when I build Clang using gcc-4.7.0[3], programs which written on C++ crash when run-time. C-code programs are compiled and work successfully. simple example: > #include <iostream> > int main() { > std::cout << "Hello world!" << std::endl; > return 0; > } " 也許目前仍然無解? 果然在 Windows 上(ry p.s. llvm都編完後才發現有別人寫了步驟... http://www.dev.idv.tw/mediawiki/index.php/%E5%9C%A8Windows%E4%B8 %8B%E9%9D%A2%E9%80%B2%E8%A1%8CLLVM%E8%88%87CLANG%E7%9A%84%E5%AE% 89%E8%A3%9D 還有 http://stackoverflow.com/questions/14419168/ using-clang-with-codeblocks-on-windows-7 有人提供編好得檔案耶XD 不過我沒測試 阿, llvm asm還一直不得其門而入QQ 官方的 tutorial 都是用官方提供的 binding 不過一方面我不想用 C++ 寫, 另一方面我編的時候忘了弄 OCaml binding, 還不知道要怎麼弄... 難道要重編第四次嗎 orz Haskell的binding還不知道要怎麼裝的說 QQ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.16.131 ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: suhorng (140.112.16.131), 時間: 07/10/2013 18:28:32 ※ 編輯: suhorng 來自: 140.112.16.131 (07/10 18:30) ※ 編輯: suhorng 來自: 118.166.47.118 (07/10 20:38)
damody:這超難編的 編到後來感覺很累就不編了= = 07/10 22:02
suhorng:發現沒編OCaml binding Q_Q 少東西 大概又得重編了 07/10 22:13
suhorng:果然用 Linux distribution 才是正道.... 07/10 22:13
tjjh89017:用cygwin會不會好點? 07/10 23:08
suhorng:明天可能先試試用 MSYS 吧, 暫時懶得把手上的 cygwin 07/10 23:27
suhorng:的 GCC 版本更新 07/10 23:27
lantw44:3.3 我用 cmake 編不過所以用 configure 07/11 11:46
lantw44:Windows 版的話我是用 Linux 來 cross compile 07/11 11:46
kingstong:#include <iostream><=光<iostream.h>堪入就錯了 07/13 19:14
kingstong:要除錯是工程師最頭大的,我自己寫是每一小段小好就編譯 07/13 19:15
kingstong:不然等整個程式完成再除錯會讓我起肖的 07/13 19:16
suhorng:他的程式沒錯 07/13 19:39
kingstong:可能版本問題不同 #include<iostream.h>一般標頭檔都是 07/13 20:13
kingstong:以這種形式堪入,不同版本的LIBRARY裡的標頭檔也會小有不 07/13 20:15
kingstong:同,我習慣是叫函式庫.現在的C語言應該也會和當初開發C的 07/13 20:18
kingstong:貝爾實驗室開發出來的C語言不太一樣,雖然邏輯和寫法都差 07/13 20:20
kingstong:不多.美國會保護自己國家的技術,日本也會..... 07/13 20:21
suhorng:其實是C++喔 07/13 21:04
kingstong:差不多,printf(" ")=cout>>.......,c++也可以編譯c的 07/13 21:08
kingstong:語法...... 07/13 21:08
LPH66:嗯, 看到 cout 的箭頭放錯邊就知道樓上大概沒真的用過 C++ 07/13 21:45
LPH66:C++ 在好久以前就建議使用 <iostream> 這種標頭了 07/13 21:45
kingstong:是我的失誤,太久沒碰C\C++了,COUT<<"輸入"<<"\n"; 07/13 22:45
kingstong:CIN>>"輸出"; 07/13 22:46
kingstong:我以前碰到的C++還是要照C的格式引入.h這種type下去寫 07/13 22:48
maerdimer:k某不懂就惦惦,少在這裡鬼扯 07/14 00:02
holymars:歹年冬.... 07/18 20:04
chehsunliu:k在說啥... 07/18 21:11