![可执行文件“正在运行”但不起作用](https://linux22.com/image/1022612/%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%E2%80%9C%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E2%80%9D%E4%BD%86%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我尝试运行一个可执行文件一段时间,但无法让它工作。我已经授予了 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
如果您尚未安装该软件包,请先安装。然后:
直接使用编译
gfortran
,也许使用legacy
代码标准gfortran -std=legacy -o Resonalyzerv2 ../source/Resonalyzerv2.f
或者
使用 gfortran 提供的版本进行编译
f77
f77 -o Resonalyzerv2 ../source/Resonalyzerv2.f
如果您已经安装了ifort
,gfortran
那么您将需要使用来update-alternatives
确认哪个包正在提供,f77
并在必要时进行调整。