2010-08-17 5 views
54

64 비트 시스템에서 사용하려고하는 독점적 인 프로그램이 있습니다.gcc가 64 비트 플랫폼에서 32 비트 프로그램을 컴파일하도록합니다.

설치 프로그램을 실행하면 제대로 작동하지만 자체를 업데이트하고 일부 모듈을 컴파일하려고 시도한 후에로드하지 못합니다.

gcc를 사용하고 있고 gcc가 64 비트 시스템 용으로 컴파일하려고 했으므로이 프로그램이이 모듈을 사용할 수 없기 때문에 의심 스럽습니다.

gcc가 32 비트 플랫폼에서 모든 작업을 수행 할 수있는 방법 (일부 환경 변수 또는 그와 유사한 방법)이 있습니까? 32 비트 chroot가 작동합니까?

+0

stackoverflow에 게시하려고하십시오. 아마도 그곳에서 좋은 반응을 얻을 것입니다. –

+0

문제는 프로그램을 설치하는 것입니다. @Nathan –

+0

[gcc/cmake를 사용하여 64 비트 Linux 컴퓨터에서 32 비트 바이너리를 컴파일하는 방법] (http : //stackoverflow.com/questions/1272357/how-to-compile-a-32-bit-binary-on-a-64-bit-linux-machine-with-gcc-cmake) –

답변

67

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

$PATH에 간단한 쉘 스크립트를 작성하고 gcc라고 할 수 있습니다. 원래 gcc를 덮어 쓰지 말고 새 스크립트가 $PATH의 앞부분에 오는지 확인하고 전체 경로를 사용합니다. . GCC

난 당신이 필요로하는 코드가 당신의 쉘에 따라 /bin/gcc -m32 $* 같은 생각 (그것은 뭔가 다른 수도 있지만 $* 모든 인수를 포함 할 수있다! - 매우 중요합니다) 당신은을

+14

또한 32 비트 C 라이브러리뿐만 아니라 어떤 경우에는 프로그램이 링크하는 외부 라이브러리의 32 비트 버전을 지원합니다. –

+5

사실. 표준 라이브러리 : C :'apt-get install gcc-multilib'; C++ :'apt-get install g ++ - multilib'. – Bart

41

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

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

하고 apt-get을 경우, 단지 GCC-multilib 당신이 gcc/g++를 사용하여 직접 컴파일 코드에 대한

sudo apt-get install gcc-multilib 
+0

C++ 프로젝트의 경우 sudo apt-get install gcc-multilib g ++ - multilib'을 사용하십시오. – phoenix

8

설치, 당신은 -m32 옵션을 추가해야합니다 컴파일 명령 줄에 Makefile에있는 CFLAGS, CXXFLAGSLDFLAGS 개의 변수를 수정하면됩니다.

사용중인 타사 코드의 경우 크로스 컴파일을 위해 빌드 할 때 반드시 확인해야합니다. ./configure --help을 실행하고 사용할 수있는 옵션을 확인하십시오. 대부분의 경우 configure 스크립트에 CFLAGS, CXXFLAGSLDFLAGS 개의 변수를 제공 할 수 있습니다. 컴파일이 실패하면 당신은 또한 아마 당신이 64 비트 시스템에서 일부 32 비트 개발 패키지를 설치해야한다는 것을 의미 당신이

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

같은 끝낼 수 있도록 구성 스크립트에 --build--host을 추가해야 할 수도 있습니다

관련 문제