
Beim Versuch, glib mit den folgenden Konfigurationsparametern plattformübergreifend zu kompilieren, treten die folgenden Fehler auf:
./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
Gibt es eine Möglichkeit, diese Tests zu deaktivieren, damit mein Cross-Compile-Prozess durchgeführt werden kann?
Antwort1
Die Standardpraxis in solchen Situationen ist die Verwendung einesAutoconf-Site-Standarddateienthält die entsprechenden Werte für die Tests, die configure
ausgeführt werden sollen.
In diesem speziellen Fallconfigure
versucht zu bestimmen, in welche Richtung der Stapel wächst:
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; }
Sie würden diesen Code also plattformübergreifend kompilieren, ihn auf Ihrer Zielplattform ausführen und seinen Exit-Code untersuchen ( echo $?
). Erstellen Sie beispielsweise eine Site-Standarddatei für Ihre Zielarchitektur config.arm-hisiv400-linux
und fügen Sie eine Zeile mit
glib_cv_stack_grows=yes
(wenn der Exit-Code oben 0 war) oder
glib_cv_stack_grows=no
(wenn der Exit-Code 1 war).
Führen Sie es dann aus configure
, indem CONFIG_SITE
Sie auf den vollständigen Pfad der Site-Standarddatei verweisen, die Sie gerade erstellt haben:
CONFIG_SITE=/path/to/config.arm-hisiv400-linux ./configure --prefix=$HOME --host=arm-hisiv400-linux
configure
sollte den Wert aus der Site-Standarddatei verwenden und den Test für den Stapel überspringen. Es wird wahrscheinlich beim nächsten Test fehlschlagen, der ein für das Ziel kompiliertes Programm ausführen muss, aber Sie können das auf die gleiche Weise beheben, indem Sie der Site-Standarddatei weitere Einträge hinzufügen (solange ungefähr configure.ac
verwendet wird ).AC_CACHE_VAL
AC_TRY_RUN