다음 구성 매개변수를 사용하여 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
스택 테스트를 건너뛰고 사이트 기본 파일의 값을 사용해야 합니다. 대상에 대해 컴파일된 프로그램을 실행해야 하는 다음 테스트에서는 실패할 수 있지만 동일한 방식으로 사이트 기본 파일에 더 많은 항목을 추가하여 문제를 해결할 수 있습니다(around 사용 configure.ac
) .AC_CACHE_VAL
AC_TRY_RUN