2010-06-04 5 views
10

--sysroot 스위치는 표준 경로의 헤더/라이브러리가 빌드에 영향을 미치지 않도록 할 때 유용합니다.gcc의 --sysroot 스위치 대신 사용할 수 있습니까?

--sysroot=dir : 헤더와 라이브러리에 대한 논리적 루트 디렉토리와 같은 디렉토리를 사용합니다. 예를 들어, 컴파일러가 일반적으로/usr/include에있는 헤더와/usr/lib에있는 헤더를 검색하면 dir/usr/include와 dir/usr/lib를 검색합니다.

[ref] 같은 일이, 환경 변수의 사용을 통해 GCC 스펙 파일을, 또는 명령 줄 스위치를 필요로하지 않는 다른 방법을 수행 할 수 있습니까?

답변

7

환경 변수를 사용할 수있는 경우 --sysroot를 CFLAGS에 추가 할 수 있습니다.

3

gcc에서 원하는 플래그를 사용하여 실제 gcc를 실행하는 래퍼 스크립트를 만들 수 있습니다. 이것은 Makefiles와 환경 변수가 엉망인 복잡한 빌드에서 작동합니다. gcc 스크립트가 실제 gcc 바이너리보다 PATH의 앞부분에 있는지 확인하기 만하면됩니다. 스크립트 자체는 단지 두 줄,

#!/bin/sh 
exec /usr/bin/gcc --sysroot=/your/sysroot "[email protected]" 

하고 $HOME/bin이 PATH에 이른 경우, 당신은 $HOME/bin에 스크립트를 넣을 수 있으며 다른 사용자에게 영향을주지 않습니다. 당신이 명시 적 /usr/bin/gcc를 찾는 configure 스크립트가있는 경우

, 당신은 /usr/bin/gcc.bin/usr/bin/gcc의 이름을 변경하고 스크립트 /usr/bin/gcc의 이름을 지정해야 할 수도 있습니다. 이는 모든 사용자에게 영향을 미칩니다. 당신이 필요하지만, 또한 특정 사용자 또는 사용자에게 영향을하려면,

#!/bin/sh 
[ "$(id -un)" -eq "theuser" ] && exec /usr/bin/gcc.bin --sysroot=/your/sysroot "[email protected]" 
exec /usr/bin/gcc.bin "[email protected]" 

를 사용하는 경우 당신은 할 수있는 변형, 예를 들어, 특정 사용자 계정 또는 그룹 구성원 자격을 사용하여 동일한 구성표를 사용하여 특정 sysroot를 설정합니다.

+0

AXIS2/C를 크로스 컴파일하려고 할 때 유일한 해결책입니다. 몇 가지 신비한 이유로, AXIS2/C의 makefile은 sharedlib를 연결할 때 CFLAGS, LDFLAGS 및 LIBS 환경 변수에 넣은 "- sysroot"옵션을 제거했습니다. 또한 ./configure --disable-shared 옵션을 사용하지 않도록 설정하려고했으나 링커가 최종 연결 단계에서 "중복 된 심볼"버그에 대해 불평 할 것입니다. – RichardLiu

+0

@RichardLiu : AXIS2/C 1.6.0에서'util/autogen.sh'를 실행하면 새로운'--with-sysroot = DIR' 설정 옵션이 증가합니다. 그러나 libtool에만 전달 된 것처럼 보입니다. '--with-cflags-sysroot' configure 옵션 (각'configure.ac'에 약 30 행)을 추가하면 작동하는 것 같습니다. 해당 패치를 사용 하시겠습니까? 전체 프로젝트는 내 dev 머신에서 ('util/src/platforms/unix/uuid_gen_unix.c') 컴파일하려고 시도하는 첫 번째 파일에서 실패하기 때문에 오래된 것 같습니다. –

관련 문제