programing

64비트 Linux OS에서 32비트용 컴파일 프로그램으로 인해 치명적인 오류가 발생함

javamemo 2023. 7. 9. 09:30
반응형

64비트 Linux OS에서 32비트용 컴파일 프로그램으로 인해 치명적인 오류가 발생함

사용.

gcc -m32 myprog.c

32비트 버전으로 파일을 컴파일해야 합니다.myprog.c.

유감스럽게도 다음 오류가 발생했습니다.

In file included from /usr/include/stdio.h:27:0,
                 from myprog.c:1:
/usr/include/features.h:374:25: fatal error: sys/cdefs.h: No such file or directory
#include <sys/cdefs.h>

제가 이걸 어떻게 고칠 수 있을까요?

사용하지 않을 경우-m32작동하지만 64비트 명령어를 사용합니다.

64비트 Linux 버전에서 32비트 이진 파일을 컴파일하려면 설치해야 합니다.libx32gcc개발 패키지 및 32비트 GNU C 라이브러리

이것을 먹어보세요.

sudo apt-get install libx32gcc-4.8-dev

그리고.

sudo apt-get install libc6-dev-i386

gcc multilib 지원이 필요합니다.패키지 설치gcc-multilib예:

sudo apt-get install gcc-multilib

저는 이와 같은 문제에 직면했습니다.64비트 우분투 버전에서 32비트 So 파일을 빌드하려고 할 때.

lib 버전을 netbeans(-> project properties -> C 컴파일러 -> 추가 옵션)에서 64비트로 전환하여 빌드할 수 있습니다.

-shared -m64

이 문제를 해결하려면 먼저 sys/cdefs.h 파일을 제공할 패키지를 알아야 합니다.

CentOs/RHEL 기반 시스템에서는 아래 명령을 실행하여 찾을 수 있습니다.

yum provides '*sys/cdefs.h'

마찬가지로 Debian/Ubuntu 시스템에서는 다음을 실행하여 찾을 수 있습니다.

apt-file search 'sys/cdefs.h'

참고: apt-file 패키지가 시스템에 아직 없는 경우 명령을 사용하여 설치합니다.

apt-get install apt-file

위의 두 명령어는 각각의 패키지 관리 시스템 데이터베이스(예: RPM/Apt)를 스캔하고 "sys/cdefs"로 끝나는 파일을 제공하는 패키지의 이름을 알려줍니다.h."

명령에 나열된 패키지에서 적절한 패키지를 설치합니다.
맘에 들다

CentOs/RHEL에서:

yum install glibc-headers 

온 데비안/우분투

apt-get install libc6-dev

이 접근 방식은 이 특정 문제뿐만 아니라 일부 패키지가 제공하지 않는 필수 파일을 보고하는 유사한 문제에도 유용합니다.

언급URL : https://stackoverflow.com/questions/23498237/compile-program-for-32bit-on-64bit-linux-os-causes-fatal-error

반응형