Une erreur de construction des bibliothèques Qt pour le PI de framboise

j'essaie de compiler les bibliothèques Qt 5 pour mon RPI, mais ça craque toujours.

ce sont les guides que j'ai essayé de suivre:

http://qt-project.org/wiki/RaspberryPi_Beginners_guide

http://qt-project.org/wiki/RaspberryPi

j'ai téléchargé le cross-compilateur et sysroot-image selon le guide et tiré les sources Qt5 depuis le repo git.

après avoir suivi un des guides je suis maintenant coincé à make .

C'est l'erreur que je reçois:

.obj/release-shared/qlibrary_unix.o: In function `QLibraryPrivate::load_sys()':
qlibrary_unix.cpp:(.text+0xf84): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/home/esa/qtonpi/rpi_image/usr/lib/arm-linux-gnueabihf/libdl.a(dlopen.o): In function `dlopen':
(.text+0xc): undefined reference to `__dlopen'
/home/esa/qtonpi/rpi_image/usr/lib/arm-linux-gnueabihf/libdl.a(dlclose.o): In function `dlclose':
(.text+0x0): undefined reference to `__dlclose'
/home/esa/qtonpi/rpi_image/usr/lib/arm-linux-gnueabihf/libdl.a(dlsym.o): In function `dlsym':
(.text+0xc): undefined reference to `__dlsym'
/home/esa/qtonpi/rpi_image/usr/lib/arm-linux-gnueabihf/libdl.a(dlerror.o): In function `dlerror':
(.text+0x0): undefined reference to `__dlerror'
/home/esa/qtonpi/rpi_image/usr/lib/arm-linux-gnueabihf/libm.a(feholdexcpt.o): In function `feholdexcept':
(.text+0x48): undefined reference to `_dl_hwcap'
/home/esa/qtonpi/rpi_image/usr/lib/arm-linux-gnueabihf/libm.a(fesetenv.o): In function `fesetenv':
(.text+0x64): undefined reference to `_dl_hwcap'
collect2: virhe: ld:n paluuarvo oli 1                                           # collect2: error: ld returnvalue was 1
make[2]: *** [../../lib/libQt5Core.so.5.0.0] Virhe 1                            # Error 1
make[2]: Poistutaan hakemistosta "/home/esa/qtonpi/qt5/qtbase/src/corelib"      # Leaving directory
make[1]: *** [sub-corelib-make_first] Virhe 2                                   # Error 2
make[1]: Poistutaan hakemistosta "/home/esa/qtonpi/qt5/qtbase/src"              # Leaving directory
make: *** [sub-src-make_first] Virhe 2                                          # Error 2
10
demandé sur varesa 2012-11-29 17:18:07
la source

5 ответов

fixez les chemins des bibliothèques dans votre sysroot. Certaines bibliothèques sont des liens symboliques vers des chemins absolus qui sont brisés lorsqu'il est placé dans votre système. Vérifiez quelque chose comme /home/esa/qtonpi/rpi_image/usr/lib/arm-linux-gnueabihf/libdl.un peu ou presque. Vous devriez voir que ce sont des liens symboliques cassés vers des chemins absolus. Fixer l'ensemble de ceux-ci. Dans les documents que vous avez rapportés, un script est fourni à cette fin. https://gitorious.org/cross-compile-tools/cross-compile-tools/blobs/master/fixQualifiedLibraryPaths )?

essayez aussi de vérifier ce si vous rencontrez toujours des problèmes: j'ai écrit quelques notes compilant une version récente à partir de la git pour l'image wheezy.

11
répondu Luca Carlon 2012-11-29 18:22:10
la source

Essayez cette

ln -s /mnt/raspberry-rootfs/lib/arm-linux-gnueabihf /lib/

fondamentalement , il semble que le(S) chemin (s) absolu (s) ont été spécifiés lorsque les fichiers so sur le Pi étaient liés (/lib/) , et donc dans le /mnt/raspberry-rootfs ils sont cassés.

reliant le Pi /lib/arm-linux-gnueabihf au répertoire /lib du Pc corrige le mauvais lien et permet à QT de compiler. C'est un sale truc, mais il fonctionne.

Si vous n'avez pas libdl/ libm sur le Pi , puis vous devez remettre la carte SD dans le Pi , démarrer et les installer. Évidemment, vous aurez besoin de créer une nouvelle image sur le PC à partir de la carte SD et de le monter sur /mnt/raspberry-rootfs

2
répondu Alan Trundle 2015-11-18 20:46:03
la source

Une réponse pour ceux qui ont essayé les réponses et qu'elles ne travaillent pas:

il se peut que l'image en Raspabe que vous avez téléchargée ne contienne pas de liens symboliques pour libdl et libdm dans le dossier /usr/lib/ .

dans ce cas le fixQualifiedLibraryPaths ne vous aidera pas car il ne peut pas trouver les liens symboliques. Copier libdl.so et libm.so peut également échouer, par exemple, si vous utilisez un lecteur flash pour copier des données à partir de votre existant Raspberry Pi, il ne les copiera pas comme des liens symboliques, mais copiera les bibliothèques elles-mêmes. Cependant, pour que la construction réussisse, il semble exiger des liens symboliques.

j'ai regardé ce que libdl et libdm dans le dossier /usr/lib/ de mon point de Framboise Pi à

cd /usr/lib/arm-linux-gnueabihf/
ls -l libld.so libm.so

faire la même chose pour les fichiers trouvés jusqu'à ce qu'ils ne soient plus des liens symboliques mais des fichiers normaux.

Sur mon système, il s'est avéré qu'ils sont appelés libdl-2.13.so et libm-2.13.so et résider dans /lib/arm-linux-gnueabihf/ au lieu de /usr/lib/...

depuis mon PC, j'ai trouvé ces fichiers exacts dans le dossier /lib/arm-linux-gnueabihf/ (si vous ne les trouvez pas, vous pouvez les copier depuis votre Raspberry Pi). J'ai donc créé des liens symboliques pour eux dans le dossier /usr/lib/arm-linux-gnueabihf/ :

sudo ln -s /lib/arm-linux-gnueabihf/libdl-2.13.so /usr/lib/arm-linux-gnueabihf/libdl.so
sudo ln -s /lib/arm-linux-gnueabihf/libm-2.13.so /usr/lib/arm-linux-gnueabihf/libm.so

après cela, qtbase a été compilé avec succès.

(noter, que pour continuer à compiler à partir de Qt, vous avez pour gardez l'image de votre carte SD montée sur votre PC (comme décrit dans le guide ), mais ce n'est pas suffisant: vous devez le monter avant starting Qt Creator)

2
répondu vsz 2015-11-18 21:04:02
la source

cela pourrait être dû au fait que libdl.so et libm.so sont absents de votre répertoire local rootfs/usr/lib/arm-linux-gnueabihf (il n'y a que libdl.a et libm.a ). Copier les deux fichiers de Raspberry Pi devrait rendre la compilation réussie.

1
répondu bmichel 2015-11-18 20:29:53
la source

au lieu de fixQualifiedLibraryPaths utiliser:

cd <folder-with-sysroot-subfolder>
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/script/sysroot-relativelinks.py
chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
1
répondu Vladimir Koltunov 2017-12-04 15:25:36
la source