【问题标题】:Compiling a fortran program on linux and moving the executable to another linux machine在 linux 上编译一个 fortran 程序并将可执行文件移动到另一台 linux 机器上
【发布时间】:2013-04-29 14:14:07
【问题描述】:

我在攻读博士学位期间用 Fortran 编写了一段代码,现在我正在与一些使用 Linux 的研究人员合作,他们需要我的模型,这基本上是一个可执行文件。将来我可能会将它开源,但要知道他们只想要可执行文件,也因为他们不是程序员,他们一生中从未编译过程序。所以问题是:是否可以在我的 linux 机器上编译它,然后将其发送给他们以便在另一台 linux 机器上使用它?或者 linux 版本和发行版是否重要? 非常感谢你 A.

【问题讨论】:

  • Linux 和架构的风格非常重要。为 i386 编译的可执行文件很难在 ARM 或 68000 上运行,尽管即使这可以在其他人的目标上使用虚拟机来完成。

标签: linux fortran portability


【解决方案1】:

如果你不使用很多库,你可以这样做。一种选择是静态链接可执行文件(-static 或类似的编译器选项)。您需要为此拥有所有所需库的静态版本。有.a 后缀。默认情况下,Linux 发行版中通常不会安装它们,并且通常根本没有在存储库中提供它们。

在我的发行版 (OpenSuSE) 中,它们位于 glibc-devel-staticlapack-devel-static 等软件包中。

另一种选择是在用户将拥有的兼容发行版上编译可执行文件(GLIBC 版本很重要),并为您的可执行文件提供他们需要的所有 .so 动态链接库。

所有这些都假设您使用相同的平台,例如 i586amd64arm 就像 wallyk cmets。我主要假设您在PC上。您可以通过-m32-m64 选项强制大多数编译器生成32 位或64 位可执行文件。为此,您需要正确版本的开发库。

【讨论】:

  • 谢谢。所以我的模型只有 f90 子程序,没有外部库。我的架构与其他人的架构相同,即它是 x86_64。我不知道 Linux 发行版是否重要,但我有 Centos 6.3 和另一个人 Fedora(我们很难检查版本,但应该是 14)。对于没有外部库和相同架构的情况,您能否修改您的答案? “正确版本的开发库”是什么意思?谢谢
  • 按照答案中的说明进行操作,我主要假设相同的架构。 “正确版本的开发库”是指 3 位或 64 位,具体取决于您编译的程序版本。只需尝试使用-static 选项进行编译,看看它是否可以在另一台机器上运行。
猜你喜欢
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多