【问题标题】:How to compile libgfortran to run on iOS arm64 architecture?如何编译 libgfortran 以在 iOS arm64 架构上运行?
【发布时间】:2018-09-06 21:45:05
【问题描述】:

我有大量的 Fortran 代码需要在 iOS 设备上运行(在 iOS 应用程序中,我会像 Objective-C -> C -> Fortran 一样与之交谈)。

我能够使用dragoneggarm64 编译该Fortran 代码。但是在链接阶段,我从gfortran 库中丢失了很多符号。

我尝试使用 Xcode 逐个文件编译 gfortran 文件,但问题很大。我宁愿至少使用configuremake 以某种方式让我更接近结果,但似乎--target=arm-apple-darwin 并不真正受支持。

知道如何创建为arm64 构建的libgfortran 吗?也许有人为arm64 预先构建了一些libgfortran

【问题讨论】:

  • gfortran 有一个选项-static-libgfortran,其目的是将libgfortran 静态嵌入到可执行文件中。你试过了吗?有时需要额外安装才能获得静态库的副本,而不仅仅是动态绑定。
  • 仍然需要为 arm64 构建静态库对吗?
  • 是的,适当的libgfortran.a(我不记得静态库文件扩展名是否是.a 就像在linux上一样)必须可用。
  • 确实 libgfortran.a 已创建,但它适用于 x86_64 架构,并且不会在 arm64 设备上运行:P gfortran 源代码是 fortran 和 c 混合,所以我猜 fortran 需要编译Dragonegg,c 与 clang 然后以某种方式组合,但它远非简单
  • 可能并不简单。我想指出-static-libgfortran 标志,但是我对交叉编译的了解是空的。

标签: ios linker fortran arm gfortran


【解决方案1】:

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

#!/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

【讨论】:

    猜你喜欢
    • 2014-12-16
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    相关资源
    最近更新 更多