Ho bisogno di compilare le subroutine Fortran-77 per essere accessibili su iOS. Sto usando GCC con il plugin DragonEgg, quindi posso usare gfortran con il backend LLVM. Ho seguito this answer ma sono bloccato quando si tratta di creare libgfortran per armv7, armv7s e arm64.Come posso eseguire una cross-compilazione di GCC per produrre libgfortran per dispositivi iOS (arm, armv7)?
- Posso creare libgfortran da solo o è sempre necessario compilare completamente la suite GCC?
- Qual è il modo corretto di produrre questa libreria per un target diverso? È possibile utilizzare GCC per questo passaggio o ho bisogno di LLVM per il braccio * -target?
Costruire GCC con braccioli obiettivi utilizzando GCC ottengo questi errori:
./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
Costruire GCC con braccioli obiettivi utilizzando LLVM ho problemi con configurazione:
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
Lo script di configurazione afferma che
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.
- Cosa si intende per Se viene rilevato un cross compilatore? Come definire correttamente la piattaforma di destinazione?
- LLVM utilizza -arch armv7 ecc. Come definizione di destinazione. Cosa si intende quando si usa GCC?
Non conosco libgfortran da solo, ma gfortran non può essere costruito senza costruire anche gcc. –
> Come si definisce correttamente la piattaforma di destinazione? Dovresti usare --target. --host imposta la piattaforma host, cioè quella su cui verrà eseguito il compilatore. –
@MikhailMaltsev Utilizzando --target anziché --host restituisce [questo errore] (https://gist.github.com/anonymous/bee6afa597903cefd7c8): 'configure: errore: impossibile eseguire programmi compilati C. Se intendevi eseguire la compilazione incrociata, utilizza --host. – timomeinen