Program Club

gcc가 64 비트 플랫폼에서 32 비트 프로그램을 컴파일하도록 강제

proclub 2020. 12. 7. 21:06
반응형

gcc가 64 비트 플랫폼에서 32 비트 프로그램을 컴파일하도록 강제


64 비트 시스템에서 사용하려는 독점 프로그램이 있습니다.

설정을 시작하면 정상적으로 작동하지만 자체 업데이트를 시도하고 일부 모듈을 컴파일하려고 시도하면로드하지 못합니다.

gcc를 사용하고 있고 gcc가 64 비트 시스템 용으로 컴파일을 시도하기 때문에이 프로그램이 이러한 모듈을 사용할 수 없다고 생각합니다.

gcc가 32 비트 플랫폼을 위해 모든 것을 수행하도록 강제하는 방법 (일부 환경 변수 또는 이와 유사한 것)이 있습니까? 32 비트 chroot가 작동할까요?


GCC가 -m32플래그를 사용하도록해야합니다 .

간단한 셸 스크립트를 작성하여 $PATHgcc라고 부를 수 있습니다 (원래 gcc를 덮어 쓰지 않도록하고 새 스크립트가에서 이전에 $PATH나오는지, GCC의 전체 경로를 사용 하는지 확인하십시오 .

나는 당신이 필요로하는 코드가 당신 /bin/gcc -m32 $*의 셸에 의존하는 것과 같다고 생각합니다 $*.


Alan Pearce의 방법을 적용하여 32 비트 바이너리를 얻을 수 있지만 다음과 같은 오류가 발생할 수도 있습니다.

fatal error: bits/predefs.h: No such file or directory

이 경우이고 apt-get이 있으면 gcc-multilib를 설치하십시오.

sudo apt-get install gcc-multilib 

사용 직접 컴파일하는 것이 코드의 경우 gcc/ g++, 당신은 추가해야합니다 -m32단순히 편집, 컴파일 명령 줄 옵션을 CFLAGS, CXXFLAGS그리고 LDFLAGS당신의 변수를 Makefile.

사용중인 타사 코드의 경우 빌드 할 때 교차 컴파일을 위해 구성하도록 구성해야합니다. 실행 ./configure --help하고 사용 가능한 옵션을 확인하십시오. 대부분의 경우 CFLAGS, CXXFLAGSLDFLAGS변수를 구성 스크립트에 제공 할 수 있습니다 . 또한 추가해야 할 수 있습니다 --build그리고 --host당신 같은 끝낼 수 있도록 구성 스크립트에

./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu

컴파일이 실패하면 64 비트 시스템에 32 비트 개발 패키지를 설치해야 함을 의미합니다.

참고 URL : https://stackoverflow.com/questions/3501878/force-gcc-to-compile-32-bit-programs-on-64-bit-platform

반응형