2016-01-24 74 views
6

我需要編譯Fortran-77子程序才能在iOS上訪問。我使用GCC和DragonEgg插件,所以我可以在LLVM後端使用gfortran。我跟着this answer,但我堅持談到爲armv7,armv7s和arm64構建libgfortran如何交叉編譯GCC以爲iOS設備(arm,armv7)生成libgfortran?

  • 我可以單獨構建libgfortran還是始終需要完全編譯GCC套件?
  • 爲不同的目標生成這個庫的正確方法是什麼?這個步驟可以使用GCC嗎?還是我需要LLVM作爲arm *目標?

大廈GCC使用GCC ARM的目標,我得到這些錯誤:

./configure --prefix=/tmp/out --host=arm-apple-darwin --enable-languages=fortran 
make 
… 
make[2]: arm-apple-darwin-ar: No such file or directory 
make[2]: *** [libiberty.a] Error 1 
make[1]: *** [all-libiberty] Error 2 

大廈GCC使用LLVM臂目標我有一個配置的問題:

export CC="$(xcrun -sdk iphoneos -find clang)" 
export CPP="$CC -E" 
export CFLAGS="-arch armv7 -arch armv7s -arch arm64 -isysroot $(xcrun --sdk iphoneos --show-sdk-path) -miphoneos-version-min=9.2" 
export AR=$(xcrun -sdk iphoneos -find ar) 
export RANLIB=$(xcrun -sdk iphoneos -find ranlib) 
export CPPFLAGS="-arch armv7 -arch armv7s -arch arm64 -isysroot $(xcrun --sdk iphoneos --show-sdk-path) -miphoneos-version-min=9.2" 
export LDFLAGS="-arch armv7 -arch armv7s -arch arm64 -isysroot $(xcrun --sdk iphoneos --show-sdk-path)" 

./configure --prefix=/tmp/out --enable-languages=fortran --host=arm-apple-darwin --disable-shared 
… 
checking how to run the C preprocessor... /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -E 
configure: error: in `/Users/timo/temp/gcc-4.8.5-build/fixincludes': 
configure: error: C preprocessor "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -E" fails sanity check 
See `config.log' for more details. 
make[1]: *** [configure-fixincludes] Error 1 

配置腳本表示

configure: WARNING: If you wanted to set the --build type, don't use --host. 
If a cross compiler is detected then cross compile mode will be used. 
  • 什麼意思是如果檢測到交叉編譯器?我如何正確定義目標平臺?
  • LLVM使用-arch armv7等作爲目標定義。使用GCC時需要什麼?
+0

我不知道libgfortran是單獨的,但gfortran不能在沒有構建gcc的情況下構建。 –

+0

>如何正確定義目標平臺? 你應該使用--target。 --host設置主機平臺,即編譯器將運行的平臺。 –

+0

@MikhailMaltsev使用--target而不是--host會產生[this error](https://gist.github.com/anonymous/bee6afa597903cefd7c8):'configure:error:無法運行C編譯的程序。 如果您想交叉編譯,請使用--host.' – timomeinen

回答

1

您正試圖在不交叉binutils的情況下構建交叉gcc庫。 Here是一個很好的建立cross-gcc for arm的手冊,你可以按照它來做。

What is meant by If a cross compiler is detected? How do I define the target platform correctly?

配置時還應該設置--target=arm-apple-darwin。 (在我自己的經驗,我沒有設置--host在所有)

make[2]: arm-apple-darwin-ar: No such file or directory 

建設手臂交叉編譯的目標庫,你應該建立的binutils這個目標之前。

對於llvm不能說什麼。

所以,只要嘗試在上面的鏈接中的所有步驟。

+0

Apple不提供binutils嗎?例如'xcrun --sdk iphoneos --find ar'生成'/ Applications/Xcode.app /目錄/ Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar'。 – timomeinen

+0

在開發源碼樹中使用'--target = arm-apple-darwin'構建_binutils_的作品。我將這些工具安裝到_/opt/cross/bin_。不幸的是,GCC不支持_arm-apple-darwin_:'***配置arm-apple-darwin不支持'(gcc configure腳本的輸出)。 – timomeinen