如何编译libgfortran以在iOS arm64架构上运行?

6

我有一大块Fortran代码需要在iOS设备上运行(在iOS应用程序中,我将像Objective-C -> C -> Fortran一样与其通信)。

我能够使用dragonegg编译出适用于arm64的Fortran代码。然而,在链接阶段中,我缺少很多来自gfortran库的符号。

我尝试使用Xcode逐个编译gfortran文件,但这相当棘手。我希望至少使用configuremake来使结果更接近,但似乎--target=arm-apple-darwin并不被支持。

有什么方法可以创建适用于arm64libgfortran吗?或许有人已经为arm64构建了一些预编译的libgfortran


gfortran有一个选项-static-libgfortran,其目的是在可执行文件中静态嵌入libgfortran。你试过吗?它有时需要额外安装静态库的副本,而不仅仅是动态绑定。 - Pierre de Buyl
静态库仍需要为arm64构建,对吗? - Ammo
是的,需要可用的适当的libgfortran.a库(我不记得静态库文件名扩展名是否与Linux上的.a相同)。 - Pierre de Buyl
确实,libgfortran.a已经创建了,但它是为x86_64架构而设计的,无法在arm64设备上运行:P gfortran源代码是Fortran和C混合的,所以我猜Fortran需要使用dragonegg编译,C使用clang编译,然后以某种方式进行组合,但这远非简单。 - Ammo
这可能并不简单。我想指出-static-libgfortran标志,但是我的交叉编译知识为零。 - Pierre de Buyl
1个回答

0

您可以通过运行./configure为静态库编译许多基于配置和Makefile的库,并在调用make时更改编译器和链接器。可以通过以下脚本完成:

#!/bin/sh

export SDK=iphoneos
export CFLAGS="-arch armv7 -arch arm64"
export CC="xcrun --sdk $SDK clang"
export CPP="xcrun --sdk $SDK cpp -D__arm__"
export LD="xcrun --sdk $SDK clang"
make -e

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接