크로스 컴파일 glib에서 테스트 프로그램을 비활성화하는 방법

크로스 컴파일 glib에서 테스트 프로그램을 비활성화하는 방법

다음 구성 매개변수를 사용하여 glib를 크로스 컴파일하려고 할 때 다음 오류가 발생했습니다.

./configure --prefix=$HOME --host=arm-hisiv400-linux

checking for growing stack pointer... configure: error: in `/home/aa/Hi3536_SDK_V2.0.4.0/glib-2.50.0':
configure: error: cannot run test program while cross compiling
See `config.log' for more details

크로스 컴파일 프로세스가 완료될 수 있도록 이러한 테스트를 비활성화하는 방법이 있습니까?

답변1

이러한 유형의 상황에서 표준 관행은 다음을 사용하는 것입니다.Autoconf 사이트 기본 파일configure실행하려는 테스트에 적합한 값을 포함합니다 .

이 특별한 경우에는configure스택이 어느 방향으로 성장하는지 확인하려고 합니다.

    volatile int *a = 0, *b = 0;
    void f (int i) { volatile int x = 5; if (i == 0) b = &x; else f (i - 1); }
    int main () { volatile int y = 7; a = &y; f (100); return b > a ? 0 : 1; }

따라서 해당 코드를 크로스 컴파일하고 대상 플랫폼에서 실행한 다음 종료 코드( echo $?)를 검사합니다. 예를 들어 대상 아키텍처에 대한 사이트 기본 파일을 만들고 다음 config.arm-hisiv400-linux줄을 추가합니다.

glib_cv_stack_grows=yes

(위의 종료 코드가 0인 경우) 또는

glib_cv_stack_grows=no

(종료 코드가 1인 경우)

그런 다음 방금 생성한 사이트 기본 파일의 전체 경로를 가리키며 configure실행 합니다 .CONFIG_SITE

CONFIG_SITE=/path/to/config.arm-hisiv400-linux ./configure --prefix=$HOME --host=arm-hisiv400-linux

configure스택에 대한 테스트를 건너뛰고 사이트 기본 파일의 값을 사용해야 합니다. 대상에 대해 컴파일된 프로그램을 실행해야 하는 다음 테스트에서는 실패할 수 있지만 동일한 방식으로 사이트 기본 파일에 더 많은 항목을 추가하여 수정할 수 있습니다( 를 configure.ac사용하는 AC_CACHE_VALAC_TRY_RUN).

관련 정보