D編譯徹底開源了,因而忍不住下載了最新的dmd編譯源碼(dmd.2.029),而後在Redhat AS3上進行編譯,可是仍是遇到了一些小問題。下面將詳細過程介紹一下: 1) 先解壓 unzip dmd.2.029.zip 便生成目錄 dmd, 該目錄下有:src/, linux/, windows/samples/ 等目錄 2) 編譯dmd編譯器 cd dmd/src/dmd/ make # 便會報錯 backend/dwarf.c:54:26: ../mars/mars.h: No such file or directory # 因而建立目錄同時要拷貝兩個文件至新建目錄: make mars cp mars.h mars/ cp complex_t.h mars/ # OK,編譯器完畢,將如下幾個可執行文件拷貝至 dmd/linux/bin/ 目錄下: cp dmd idgen optabgen impcnvgen ../../linux/bin/ 3) 編譯運行時庫 cd dmd/src/druntime/src chmod 755 build-dmd.sh ./build-dmd.sh # 因而報錯 : No such file or directory # 爲找到各類緣由,本人花了很久,終於搞明白是由於 build-dmd.sh 的原始格式爲DOS格式, # 因此須要轉換爲 unix 格式 # 因而乎用工具將 build-dmd.sh 由DOS格式轉換爲UNIX格式, 再運行: ./build-dmd.sh # Ok 4) 編譯 phobos 庫,裏面包含經常使用的函數庫 cd dmd/src/phobos make -f linux.mak # 因而報錯 make: *** No rule to make target `../druntime/lib/libdruntime.a', needed by `obj/posix/release/libphobos2.a'. Stop. # 解決方法以下: cd dmd/src/druntime/lib/ ln -s release/libdruntime.a libdruntime.a # 而後 cd dmd/src/phobos make -f linux.mak # ok, 編譯 phobos 成功,同時會自動將庫 libphobos2.a 拷貝至 dmd/linux/lib/ 目錄 5) 最後將 dmd/src/druntime/lib/release/ 目錄下的全部庫拷貝至 dmd/linux/lib/ 目錄, 同時修改環境變量設置,將 xxx/dmd/linux/bin, xxx/dmd/linux/lib 放入我的環境變量中 不知即將發佈的 dmd.2.030 會不會將這些小問題都給解決了:) 另外,本人在編譯 dmd/samples/ 下的例子時,發現基本上是編譯不過去,查看了源碼,原來裏面用的庫基本都是 dmd.1.0 的庫,但願 Walter Bright 等人將此類問題都解決了,呵呵 注:以上僅是將DMD.2.029 在Redhat AS4的編譯過程,若是想要在AS3上編譯經過,還須要將附件的 linux.mak 替換 src/phobos/ 目錄下的 linux.mak; 補充:若是你用的DMD.2.030在 AS3上編譯,則須要將 linux.2.030.rar 替換 src/phobos/ 下的 linux.mak; 我的微博:http://weibo.com/zsxxsz