x86_64 시스템에서 x86-64 실행 파일을 실행할 때 바이너리 파일을 실행할 수 없습니다: Exec 형식 오류

x86_64 시스템에서 x86-64 실행 파일을 실행할 때 바이너리 파일을 실행할 수 없습니다: Exec 형식 오류

x64 시스템에서 WSL 및 G++를 사용하여 컴파일된 C++ 애플리케이션을 Visual Studio에서 개발 중입니다.

이것이 당연하다면 죄송합니다. 하지만 저는 Linux에서 애플리케이션을 개발하는 것이 처음입니다.

/proc/cpuinfo 플래그:

fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti ssbd ibrs ibpb fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat pku ospke md_clea

"./program.out"을 사용하여 실행 파일을 실행하면 다음과 같은 결과가 나옵니다.

bash: ./program.out: cannot execute binary file: Exec format error

"sudo ./program.out"을 사용하십시오.

./program.out: 1: ./program.out: 1: not found
./program.out: 1: ./program.out: ELF: not found
./program.out: 1: ./program.out: A��878G8G����DD: not found
./program.out: 1: ./program.out: A: not found
./program.out: 1: ./program.out: 1: not found
: No such filents.out: 1: ./BeXCoolAccounts.out: cannot open
./program.out: 2: ./program.out: @!l: not found
: No such filents.out: 1: ./BeXCoolAccounts.out: cannot open �GJ�V�JA
./program.out: 1: ./program.out: %@@@����nnppp-[-[����X�XA1A: not found
./program.out: 2: ./program.out: Syntax error: end of file unexpected

및 "file./program.out":

./program.out: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), no program header, missing section headers

해결책을 찾을 때 "ldd ./program.out"을 시도했습니다.

not a dynamic executable

그리고 "strace ./program.out":

execve("./program.out", ["./program.out"], 0x7ffcc5b8b100 /* 27 vars */) = -1 ENOEXEC (Exec format error)
strace: exec: Exec format error
+++ exited with 1 +++

또한 실행 파일에 chmod a+x를 사용했지만 여전히 결과가 없습니다.

답변1

프로그램 헤더 없음, 섹션 헤더 누락

동적 실행 파일이 아닙니다.

어떻게 컴파일했는지는 모르겠지만 결과 파일은 다음과 같습니다.아니요유효한 Linux 실행 파일입니다. 예를 들어 텍스트 모드를 사용하여 FTP를 통해 복사하는 경우 이런 일이 발생할 수 있습니다. 또는 생성된 파일을 텍스트 편집기에서 편집했습니다.

fileFedora 33의 유효한 실행 파일에 대한 반환 결과는 다음과 같습니다.

file `which file`
/bin/file: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b8d5ba190593ec9e03e602d75dc0ea24a27a5cdb, for GNU/Linux 3.2.0, stripped

또는 Ubuntu 18.04의 경우:

$ file `which file`
/usr/bin/file: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=2b26928f841d92afa31613c2c916a3abc96bbed8, stripped

관련 정보