我的公司有一堆Fortran代码。传统上,我们将所需的代码编译成.dll,并在需要完成计算时调用.dll。我们现在正在尝试创建一个iPad应用程序,遗憾的是这意味着我们不能再调用.dll了。
我的一个同事设法创建了一个简单的命令行工具项目,我们调用Fortran文件在调试器中编写“Hello,World”。但是,当我试图让它在基于视图的iPad应用程序上工作时,我收到一堆链接器错误,说明我正在使用的符号无法找到。我知道命令行工具使用.cpp文件来实际运行Fortran,我看到许多关于在应用程序中调用.cpp文件的线程,但我看到的所有文件都已过时,直接相互矛盾,并且他们的修复对我不起作用。
我的问题是,是否有更直接的方式直接从.m文件调用Fortran?如果没有,我需要做什么才能使用命令行工具和把它带进应用程序?
更新1:按照评论中发布的教程,我已经能够从我的Fortran代码创建一个.o文件。我可以做一个文件添加文件来轻松添加它,但现在我该如何实际调用呢?
更新2:好的,宝贝步骤。我发现你可以使用终端命令ar crv new_library.a source_file.o
从.o文件(“source_file.o”)创建一个.a静态库(我称之为“new_library”)(你可以为多个.o做。)文件只需添加source_file2.o source_file3.o
即可获得所需数量的.o文件 - 注意:请确保使用cd
转到.o文件所在的文件夹。我很确定Xcode可以使用.a文件,但似乎还需要.h文件让项目中的其他文件(如视图控制器)调用.a文件中的内容。我知道我可以从Xcode本身创建一个新的.a文件(New Project - > iOS - > Framework& Library - > Cocoa Touch Static Library),但是当我过去这样做的时候,我只需编写正常的.m和.h文件,当我构建新库时,它只将所有.m文件混合成1 .a。当我想在另一个项目中使用.a中的代码时,我只是将.a和所有.h文件导入到新项目中,我可以调用.a文件中的方法,就像我已经导入了所有单独的.m文件。所以下一个问题是,当我的.a是用终端代替Xcode时,我还需要.h吗?如果是这样,我将如何制作Fortran头文件?如果没有,如何在.a中调用我的Fortran代码?
答案 0 :(得分:4)
让我们试着总结一下:
您需要一个可以生成ARM代码的FORTRAN交叉编译器。 GCC可能是一个不错的选择。但是你需要自己从源代码下载中构建它。
编译FORTRAN代码并将其放入静态库中。此任务在XCode外部执行,可能来自命令行。
为您直接从C调用的FORTRAN例程编写C头文件。您可能需要查看Fortran and C/C++ mixed programming或Tutorial: Using C/C++ and Fortran together。这些页面解释了如何将C数据类型映射到FORTRAN数据类型,反之亦然。
将C头文件和静态库添加到XCode项目中。
将C头文件导入到需要的Objective-C文件(.m)中,并调用FORTRAN例程,就好像它们是C函数一样。
使用XCode构建iOS应用程序。