Comment travailler avec les bibliothèques externes lors de la compilation croisée?
Je suis en train d'écrire un peu de code pour raspberry pi BRAS de la cible sur x86 machine ubuntu. Je suis l'aide de la gcc-linaro-armhf de la chaîne. Je suis en mesure de cross compiler et exécuter des programmes indépendants sur la pi. Maintenant, je veux le lien de mon code avec une bibliothèque externe comme ncurses. Comment puis-je y parvenir.
Devrais-je simplement le lien de mon programme avec la lib ncurses sur la machine hôte et ensuite l'exécuter sur les BRAS? (Je ne pense pas que cela fonctionne)
Dois-je obtenir la source ou prêts à l'emploi version de la lib pour les bras, de le mettre dans ma lib chemin et ensuite compiler?
Quelle est la meilleure pratique dans ce genre de situation?
Je veux aussi savoir comment cela fonctionne pour le c stdlib. Dans mon programme, j'ai utilisé les fonctions de stdio et il a travaillé après la compilation croisée sans rien faire de spécial. Je viens de chemin indiqué pour mon bras gcc dans le makefile. Donc, je veux savoir, comment il est arrivé de corriger les mst en-têtes et les bibliothèques?
OriginalL'auteur Punit Soni | 2013-09-19
Vous devez vous connecter pour publier un commentaire.
Concernant vos questions d'ordre général:
Pourquoi la bibliothèque C de travaux:
La bibliothèque C est la partie de votre croix de la chaîne. C'est pourquoi les en-têtes sont trouvés et le programme correctement des liens et des pistes. C'est également le cas pour certains autres très de base du système des bibliothèques comme la libm et libstdc++ (pas dans tous les cas, dépend de la suite d'outils de configuration).
En général lorsque l'on traite avec la croix-développement, vous avez besoin d'une certaine manière pour obtenir vos propres bibliothèques de la croix-compilé. À l'aide de fichiers binaires dans ce cas est très rare. C'est, en particulier avec BRAS de matériel, car il existe de nombreuses configurations différentes et souvent tout est dépouillé de beaucoup de différentes manières. C'est pourquoi les fichiers binaires ne sont pas très compatible binaire entre les différents dispositifs et configurations Linux.
Si vous êtes sous Ubuntu sur le Raspberry Pi, puis il ya une chance que vous pouvez trouver une bibliothèque ncurses sur internet ou même dans certains Ubuntu dépôt apt. La manière typique, cependant, sera de faire de la compilation croisée de la bibliothèque avec l'ensemble des outils que vous avez obtenu.
Dans les cas où un lot et complexe de bibliothèques ont besoin d'être cross-compilé il y a des solutions qui rendent la vie un peu plus facile comme buildroot ou ptxdist. Ces programmes d'élaborer des noyaux de Linux et de la racine des systèmes de fichiers pour les appareils embarqués.
Dans votre cas, cependant, aussi longtemps que vous voulez ncurses, vous pouvez compiler le code source vous-même. Il vous suffit de télécharger les sources, exécutez
configure
tout en spécifiant votre chaîne à l'aide de la--host
option. Le--prefix
option de choisir le répertoire d'installation. Après l'exécution demake
etmake install
, considérant que tout s'est bien passé, vous disposez d'un ensemble d'en-têtes et les BRAS-bibliothèque compilé pour votre demande de lien contre.Concernant la cross compilation, vous trouverez sûrement une foule de renseignements sur l'internet et peut-être ncurses a quelques pointeurs dans son expédition de la documentation, de trop.
arm-gcc vous caculated lui-même en fonction chemin d'accès relatif, de sorte que vous ne pouvez pas modifier la structure des répertoires de votre compilateur croisé
pourrait aider à donner un exemple de la manière dont ces options (
--host
,--prefix
) de travail.OriginalL'auteur gerrit zijlstra
Pour la requête
How the C library works in cross-tools
Lors de la compilation et de la construction de la croix-outil de la chaîne au cours de la configuration, ils fourniront sysroot.
comme
--with-sysroot=${CLFS_CROSS_TOOLS}
--with-sysroot
--with-sysroot=dir
Tells GCC to consider dir as the root of a tree that contains (a subset of) the root filesystem of the target operating system. Target system headers, libraries and run-time object files will be searched for in there. More specifically, this acts as if --sysroot=dir was added to the default options of the built compiler. The specified directory is not copied into the install tree, unlike the options --with-headers and --with-libs that this option obsoletes. The default value, in case --with-sysroot is not given an argument, is ${gcc_tooldir}/sys-root. If the specified directory is a subdirectory of ${exec_prefix}, then it will be found relative to the GCC binaries if the installation tree is moved.
Donc au lieu de chercher
/lib /usr/include
il va chercher /Outils/(libc) et (inclure les fichiers) lors de sa compilationvous pouvez vérifier par
arm-linux-gnueabihf-gcc -print-sysroot
ce spectacle où chercher pour libc .
aussi
arm-linux-gnueabihf-gcc -print-search-dirs
vous donne un aperçu clair
OriginalL'auteur vinay hunachyal
Clairement, vous aurez besoin d'un
ncurses
compilé pour le BRAS que vous ciblez - les l'un sur l'hôte ne vous servira absolument à rien [à moins que votre hôte dispose d'un processeur ARM - mais vous avez dit x86, donc clairement pas le cas].Il PEUT y avoir certains prédéfinis bibliothèques disponibles, mais je soupçonne que c'est plus de travail pour en trouver un (qui fonctionne et qui correspond à vos conditions particulières) que pour la construction de la bibliothèque vous-même à partir de sources d' - il ne devrait pas être difficile, et je m'attends à
ncurses
de ne prendre que de nombreuses minutes pour construire.OriginalL'auteur Mats Petersson
À votre première question, si vous avez l'intention d'utiliser la bibliothèque ncurses avec votre compilateur croisé de la chaîne, vous aurez son bras-construit binaires préparé.
Votre deuxième question est de savoir comment il fonctionne avec les mst libs, et bien c'est vraiment PAS le système de la libc/libm la suite d'outils pour compiler et lier votre programme est. Vous verrez peut-être de --print-nom de fichier= option de votre compilateur:
Je pense que votre Raspberry chaîne d'outils pourrait être la même. Vous pouvez essayer cela.
OriginalL'auteur TwoCode
Vinay réponse est assez solide. Juste une correction lors de la compilation de la bibliothèque ncurses pour raspberry pi la possibilité de configurer votre rootfs est
--sysroot=<dir>
et pas--with-sysroot
. C'est ce que j'ai trouvé lorsque j'ai été en utilisant le compilateur suivant:OriginalL'auteur anaken78