CFLAGS 환경 변수를 터치하지 않고 64 비트 리눅스 머신에서 32 비트 바이너리를 컴파일하는 방법
-
16-09-2019 - |
문제
솔루션
GCC/CMAKE를 사용하여 64 비트 Linux 시스템에서 32 비트 바이너리를 컴파일하는 방법
CFLAGS 변수를 이미 사용하는 타사 소프트웨어 및 기타 항목을 사용하기 때문에 불가능합니다. 그리고 그들의 makefiles를 패치하는 것은 허용되지 않습니다 - 내 상사는 말합니다.
그래서 나는 그것을 시행 할 다른 방법을 찾아야합니다. 기호 링크가있는 일부 마법은 GCC로 호출을 32 비트 버전의 컴파일러로 리디렉션합니다 (기본 대상이 동적으로 감지되지 않기를 바랍니다).
해결책
환경에서 CFLAG를 변경할 수는 없지만 빌드에 대해 일시적으로 재정의 할 수없는 이유가 있습니까?
Autotool 기반 패키지의 경우 먼저 시도하겠습니다.
CFLAGS="-m32" ./configure [opts]
make
make install
잘 쓰여진 configure.ac
파일은 패키지 소스를 수정하지 않고도 CFLAGS 변수를 존중하고 추가해야합니다.
업데이트
그렇다면 CC 변수를 재정의 할 수 없다고 가정하면 몇 가지 경로 트릭을 재생할 것입니다. 쉘 스크립트를 만듭니다 ${HOME}/gcc32
~라고 불리는 gcc
다음 (테스트되지 않은)으로 :
#!/bin/sh
/usr/bin/gcc -m32 "$@"
그런 다음 32 비트를 만들고 싶을 때 경로에 이것을 전제하십시오.
export PATH=${HOME}/gcc32:${PATH}
명백한 수정이 지원됩니다 g++
, icc
, 또는 다른 컴파일러.
다른 팁
GCC와 친구가 "/usr/bin"에 있다고 가정 해 봅시다. 또한 경로에있는 "~/.local/bin"이라는 폴더가 있다고 가정 해 봅시다. "~/.local/bin"에서 "gcc"라는 bash 스크립트를 만들 수 있습니다.
#! /bin/bash /usr/bin/gcc -m32 $@
다음과 같이 컨텐츠를 사용하여 "g ++"스크립트를 유사하게 만들 수 있습니다.
#! /bin/bash /usr/bin/g++ -m32 $@
기본적으로 필요에 따라 "C ++", "CC", "As", "LD"등에 대해 계속하십시오. 스크립트를 실행할 수 있습니다. "~/.local/bin"이 "/usr/bin"전에 경로 환경 변수에 있는지 확인하십시오. 이 경우 MakeFile이 컴파일러를 호출 할 때 (상대 경로를 사용했다고 가정) 스크립트가 대신 호출됩니다.