Thực tiễn tiêu chuẩn trong loại tình huống này là sử dụng tệp mặc định của trang Autoconf chứa các giá trị phù hợp cho các bài kiểm tra configure
muốn chạy.
Trong trường hợp cụ thể này, configure
đang cố gắng xác định hướng phát triển của ngăn xếp:
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; }
Vì vậy, bạn sẽ biên dịch chéo mã đó, chạy nó trên nền tảng đích của bạn và kiểm tra mã thoát ( echo $?
). Ví dụ config.arm-hisiv400-linux
, tạo một tệp mặc định cho kiến trúc đích của bạn và thêm một dòng với
glib_cv_stack_grows=yes
(nếu mã thoát ở trên là 0) hoặc
glib_cv_stack_grows=no
(nếu mã thoát là 1).
Sau đó chạy configure
với CONFIG_SITE
chỉ vào đường dẫn đầy đủ của tệp mặc định của trang bạn vừa tạo:
CONFIG_SITE=/path/to/config.arm-hisiv400-linux ./configure --prefix=$HOME --host=arm-hisiv400-linux
configure
nên sử dụng giá trị từ tệp mặc định của trang, bỏ qua kiểm tra cho ngăn xếp. Nó có thể sẽ thất bại trong bài kiểm tra tiếp theo cần chạy chương trình được biên dịch cho mục tiêu, nhưng bạn có thể sửa nó theo cách tương tự, thêm nhiều mục vào tệp mặc định của trang (miễn là configure.ac
sử dụng AC_CACHE_VAL
xung quanh AC_TRY_RUN
).
./configure --help
có thể giúp.