CFLAGS 환경 변수를 터치하지 않고 64 비트 리눅스 머신에서 32 비트 바이너리를 컴파일하는 방법

StackOverflow https://stackoverflow.com/questions/1673389

문제

솔루션

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이 컴파일러를 호출 할 때 (상대 경로를 사용했다고 가정) 스크립트가 대신 호출됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top