La Cross compilation: GCC ignore --sysroot
Je suis en train de faire de la compilation croisée des programmes (actuellement avconv de libav) pour un Nokia N9 téléphone à l'aide de l'arm-linux-gnueabi-gcc à partir de Linux Mint 64 bits référentiel. Le compilateur de la version de la libc est 2.15 et le téléphone a libc-2.10.1. Ils ont une incompatibilité dans la bibliothèque de mathématiques, ce qui me donne une erreur de segmentation quand j'ai compiler et exécuter le avconv programme de libav.
J'avais besoin pour compiler et lier à l'encontre de l'ancienne version de la libc, mais je n'ai pas réussi à obtenir la --sysroot
option.
J'ai fait un petit programme de test pour éviter à plusieurs reprises la configuration et la compilation de libav.
arm-linux-gnueabi-gcc --sysroot=/opt/CrossCompilation/NokiaN9/ -o output.sysroot hello.c
arm-linux-gnueabi-gcc -o output.nosysroot hello.c
Les deux commandes permettant de créer une identique du fichier de sortie. C'est ce que hello.c
ressemble:
#include <stdio.h>
#include <math.h>
int main() {
printf("Hello, World! Sin = %f\n", sin(0.6451));
}
Le plus étrange, c'est que gcc ignore complètement le --sysroot
option. Si je passe un répertoire inexistant à sysroot, il produit toujours exactement la même sortie binaire:
arm-linux-gnueabi-gcc --sysroot=/foo/bar -o output.foobar hello.c
Il n'a même pas se plaindre d'éventuelles erreurs. Quel est le problème?
arm-linux-gnueabi-gcc -v
et regardez la valeur de --with-sysroot; c'est le répertoire le compilateur a été construit avec. Si vous avez ce répertoire présent sur votre machine (peut-être avec un autre compilateur), puis le --sysroot
peut ne pas fonctionner. Qu'est-ce que le gcc
version?Il n'y a pas de "--with-sysroot" défini. gcc est la version 4.6.3
Mais au lieu de "grep /usr/arm" trouve "--with-gxx-inclure-dir=/usr/arm-linux-gnueabi/include/c++/4.6.3", "--includedir=/usr/arm-linux-gnueabi/include", "--with-headers=/usr/arm-linux-gnueabi/include", et "--with-libs=/usr/arm-linux-gnueabi/lib".
--with-libs
signifie que votre gcc
est compilé sans --sysroot
de soutien.OriginalL'auteur trololo | 2013-07-11
Vous devez vous connecter pour publier un commentaire.
depuis que j'ai perdu quelques jours de jouer avec cette avant de lire les commentaires, je vais les poster naïve bruitcommentaires comme réponse:
"Exécuter le compilateur avec
arm-linux-gnueabi-gcc -v
et regardez la valeur de--with-sysroot
; c'est le répertoire le compilateur a été construit avec. Si vous avez ce répertoire présent sur votre machine (peut-être avec un autre compilateur), puis l' --sysroot peut ne pas fonctionner[; et si vous ne pas voir--with-sysroot
et au lieu de voir--with-libs
, c'] signifie que votre gcc est compilé sans--sysroot
soutien."il a été un moment depuis que j'ai foiré avec cela, mais si vous avez
--with-libs
au lieu de--with-sysroot
, de l'utilisation qui peut-être? ou télécharger un autre de la chaîne, ou créer votre propre.OriginalL'auteur jcomeau_ictx