可执行文件“正在运行”但不起作用

可执行文件“正在运行”但不起作用

我尝试运行一个可执行文件一段时间,但无法让它工作。我已经授予了 chmod +x 权限,但文件似乎可以运行,但没有正常工作。

这是 ls -l 的结果:

-rw-rw-r-- 1 gabriel gabriel   620 jan 22  2020 plasys.inp
-rwxrwxrwx 1 gabriel gabriel 29536 jan 22  2020 Resonalyzerv2
-rwxrwxrwx 1 gabriel gabriel 28792 jan 22  2020 Superatlasv2

我需要同时使用 Resonalyzer 和 Superatlas,但当我使用 './file' 执行时,它们只是“运行”并让我返回终端,而它们应该要求我输入一些值,然后返回结果。这是我尝试执行它们时的终端:

(base) gabriel@brainiac:~/IC/tabare/linux$ ./Resonalyzerv2 
(base) gabriel@brainiac:~/IC/tabare/linux$ 

和:

(base) gabriel@brainiac:~/IC/tabare/linux$ ./Superatlasv2 
(base) gabriel@brainiac:~/IC/tabare/linux$ 

我的教授使用了与我相同的文件并执行了相同的过程,这对他来说很有效。我使用的是 ubuntu 20.04,他使用的是 16.04

编辑

Resonalyzer 的 ldd 结果是:

    linux-vdso.so.1 (0x00007ffec50af000)
    libf2c.so.2 => /usr/lib/x86_64-linux-gnu/libf2c.so.2 (0x00007f28efb7a000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f28efa2b000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f28ef839000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f28efdb3000)

对于 Superatlas:

linux-vdso.so.1 (0x00007ffc0b1e9000)
   libf2c.so.2 => /usr/lib/x86_64-linux-gnu/libf2c.so.2 (0x00007feff818f000)
   libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007feff8040000)
   libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007feff7e4e000)
   /lib64/ld-linux-x86-64.so.2 (0x00007feff83c8000)

Resonalyzer 的文件命令:

Resonalyzerv2: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=e95bde4f8cc35d6884e7b7a996972c8670d88045, for GNU/Linux 3.2.0, not stripped

对于 Superatlas:

Superatlasv2: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=0ff6fce0ffe2c4da50e2a34a765ad6d916ef823d, not stripped

答案1

我尝试./Resonalyzerv2从作者提供的 zip 存档中运行这里在我的 18.04 系统上,可以确认它以状态 0 立即退出。

根据您的ldd输出,我们可以猜测该程序是使用fort77- 编译的,它f2c在后台使用将传统的 Fortran 代码转换为 C 代码。

有一个已报告错误在符合您描述的症状的Ubuntufort77软件包中。运行使用 fort77 重新编译的版本并进行调试(f77 -g)显示它退出时出现

[Inferior 1 (process 27235) exited normally]

甚至在尝试编写程序的标语之前。我的strace-fu 很弱,但strace ./Resonalyzerv2似乎没有提供更多信息。

我不知道解决该错误是否取得了任何进展,或者它是否会影响后续的 Ubuntu 版本,但由于 zip 存档包含这两个程序的 Fortran 源代码,您可以尝试使用gfortran而不是自己编译它们fort77

首先,gfortran如果您尚未安装该软件包,请先安装。然后:

  1. 直接使用编译gfortran,也许使用legacy代码标准

     gfortran -std=legacy -o Resonalyzerv2 ../source/Resonalyzerv2.f
    

或者

  1. 使用 gfortran 提供的版本进行编译f77

     f77 -o Resonalyzerv2 ../source/Resonalyzerv2.f
    

如果您已经安装了ifortgfortran那么您将需要使用来update-alternatives确认哪个包正在提供,f77并在必要时进行调整。

相关内容