8
votes

Ne peut pas trouver /lib/libc.so.6

Je compose une application de la compilation croisée, mais le lien avec une erreur avec une erreur

"Impossible de trouver /lib/libc.so.6". P> BlockQuote>

Le libc.so.6 qu'il devrait utiliser est celui qui se trouve à /home/work/worldcom/filesys/lib/libc.so.6 code>. Qu'est-ce que je me suis trompé ici? P> xxx pré>

mon maquillage est manuscrit (c'est-à-dire non généré par AutoTools ). Afin d'éviter une couverture "Votre maquillage est cassé" Voici quelques détails du makefile qui pourrait aider à clarifier. P>

CROSS_COMPILE = arm-none-linux-gnueabi-  
SYSROOT = /home/work/worldcom/filesys/  
DESTDIR = /home/work/worldcom/filesys/  

RELEASE_CXXFLAGS = -Os  
DEBUG_CXXFLAGS = -O0 -gstabs  
PKGCONFIG=`env ROOT=/home/work/worldcom/filesys cross-pkg-config glib-2.0 libcurl --cflags`  

CC = $(CROSS_COMPILE)gcc  
CXX = $(CROSS_COMPILE)g++  
LD = $(CROSS_COMPILE)ld  
AR = $(CROSS_COMPILE)ar  

LDFLAGS = -Wl,-O1 -Wl,-z,defs -Wl,--enable-new-dtags -Wl,--sort-common -Wl,--as-needed -Wl,--hash-style=both -L$(SYSROOT) -L$(SYSROOT)lib -L$(SYSROOT)usr -L$(SYSROOT)usr/lib -lcurl  

libobj.so: $(LIBOBJ_OBJS)  
        @echo linking $@  
        $(CXX) $^ -o $@ $(LDFLAGS) -shared $(PKG_LIBS) 


1 commentaires

Vous devriez avoir un coup d'œil à la sortie de gcc -dumpspecs - il peut avoir quelque chose à ce sujet là où il recherche libc.


4 Réponses :


-3
votes

Il semble que le maquillage soit cassé, car le libc.so.6 est supposé être situé dans le / la lib / dossier (notez la barre oblique précédente indiquant un chemin absolu!). Cela semble être le problème.


3 commentaires

Bien sûr, mais quoi dans le maquillage pourrait être brisé? Vous pouvez voir de ce que j'ai collé exactement ce qui est lié, non? Et tous ceux-là du point à des endroits qui ne sont clairement pas /. Soooo ... il y a quelque chose d'autre qui me manque. Je vais ajouter plus d'informations sur ma question et voir si cela aide à clarifier ...


D'accord, je suppose que je n'étais pas assez clair ici .. :-). Il y a une énorme différence entre un nom de chemin comme / foo / bar et foo / bar. La première est toujours pointée sur / foo / bar /, comme on le voit de la racine de votre système de fichiers, le dernier dépend de votre répertoire de travail actuel. Parce que le chemin dans le maquillage semble être absolu, c'est-à-dire de la racine en cours, vos chemins de recherche ne sont même pas levés et recherchés pour le libc.so. J'espère que cela a aidé.


Ce n'est pas le maquillage qui est cassé, les chemins absolus sont contenus dans des scripts de liaison. Ce n'est pas nécessairement faux, car les lieurs de compilation croisés sont censés rechercher sous un préfixe de sysroot ... mais cela fait des messages d'erreur très confus.



0
votes

Avez-vous pas considéré que celles-ci éventuellement le libpath code> est défini et codé dur pour rechercher le /lib/libc.so.6 code> et donc le / lib code> chemin?

Avez-vous essayé de définir la variable d'environnement comme celle-ci sur la ligne de commande, avant d'émettre faire code> lors de la compilation croisée: p>

LIBPATH=/home/work/worldcom/filesys/lib


1 commentaires

Vient d'essayer exporter libpath = / home / travail / worldcom / filesys / lib et n'a pas de joie. Peut-être que vous avez raison sur le compilateur GCC étant construit pour pointer vers le chemin / lib, bien que cela semble étrange. Je vais examiner cela comme une source possible du problème. Merci, lisha



14
votes

Vous n'avez pas indiqué la version GCC que vous utilisez, mais si elle est suffisamment récente (4.0.0 et plus de moi pense), vous devriez ajouter l'ajout du - Sysroot Drapeau à g ++ / ld. Pointez-le à $ sysroot comme défini dans votre maquillage. Par exemple: xxx

supposant une version de GCC assez récente, cela fonctionnera.


2 commentaires

Mon héros!!! :) C'est en fait --Systoroot sans "avec-", mais tu m'as dirigé dans la bonne direction et ça marche. Maintenant, j'ai une nouvelle erreur. De nouvelles erreurs sont bonnes. Cela signifie que j'ai passé un problème au-delà et j'ai un tout nouveau défi pour induire une hypertension artérielle! :) Voici la nouvelle ligne dans mon maquillage: $ (CXX) $ ^ -o $ @ $ (ldflags) -shared $ (pkg_libs) --sysroot = $ (sysroot)


Et maintenant aujourd'hui, 10,5 ans après que cette réponse a été postée, vous êtes mon héros aussi.



1
votes

Je viens de passer par le même problème; Ajouter --Systroot = / rootfs / préfixe m'a aidé à me rapprocher du problème réel. Je l'ai rééquilibré en installant le package LIBSTDC ++ - Dev dans la cible.


0 commentaires