代码之家  ›  专栏  ›  技术社区  ›  HippoProgrammer

为什么尽管为正确的体系结构进行了编译,但我还是会得到“执行二进制文件时出错”?

  •  -1
  • HippoProgrammer  · 技术社区  · 1 年前

    我正在尝试使用gcc和gfortran for aarch64编译一个C/Fortran程序。 尽管成功完成了编译,但我无法执行二进制文件: bash: .: gMultiwfn: cannot execute binary file 当我尝试使用运行它时 . gMultiwfn .使用 sudo -s 然后运行 .gMultiwfn 也失败了。

    我是Fortran和编译的新手,但我在网上找不到关于这个问题的任何信息:所有内容都说“为正确的体系结构编译它”。

    我正在使用Makefile进行编译,它运行 aarch64-linux-gnu-gfortran -O2 -fopenmp -ffree-line-length-none -cpp define.o util.o plot.o Bspline.o sym.o libreta.o function.o GUI.o sub.o integral.o Lebedev-Laikov.o DFTxclib.o edflib.o fileIO.o spectrum.o DOS.o Multiwfn.o 0123dim.o LSB.o population.o orbcomp.o bondorder.o topology.o excittrans.o otherfunc.o otherfunc2.o otherfunc3.o surfana.o procgriddata.o AdNDP.o fuzzy.o CDA.o basin.o orbloc.o visweak.o EDA.o atmraddens.o NAONBO.o minpack.o ean.o hrr_012345.o eanvrr_012345.o boysfunc.o ./dislin_d-11.5.a -lXm -lXt -lX11 -lGL -lblas -llapack -o gMultiwfn .o文件已在Makefile的前几个步骤中编译,它们都返回相同的调试输出:它们是aarch64。它们是使用 aarch64-linux-gnu-gfortran -O2 -fopenmp -ffree-line-length-none -cpp -c [whatever file].f90 .

    各种调试命令的一些输出(如果需要更多信息,请告诉我):

    $ file gMultiwfn
    gMultiwfn: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID\[sha1\]=ef34baade8dbbfd9f99e970ebec8e7c6468368a2, for GNU/Linux 3.7.0, not stripped
    
    $ ls -l gMultiwfn
    -rwxrwxrwx 1 admin admin 8644192 Jun  8 12:54 gMultiwfn
    
    $ uname -m
    aarch64
    
    $ objdump -i gMultiwfn
    BFD header file version (GNU Binutils for Debian) 2.40
    

    我尝试使用aarch64 linux gnu gfortran和aarch64 linux gnu gcc,而不是仅使用gfortran或gcc,但我仍然无法执行该文件。

    1 回复  |  直到 1 年前
        1
  •  0
  •   Mike Kinghan Luchian Grigore    1 年前

    我受到抨击:。:gMultiwfn:当我尝试使用运行二进制文件时,无法执行它。gMultiwfn。

    这不是运行可执行文件的方式。比较

    错误的

    /bin$ . gcc --version
    bash: .: /usr/bin/gcc: cannot execute binary file
    

    正确的

    /bin$ ./gcc --version
    gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0
    Copyright (C) 2023 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
    

    也要注意 ./prog 就是你的跑步方式 prog 当它是当前目录中文件的名称时( ./ )恰好是可执行的。如果您希望运行不在当前目录中但可以找到的程序 在您的 PATH 那就跑吧 $ prog 喜欢

    ~$ gcc --version
    gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0
    Copyright (C) 2023 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    推荐文章