2017-07-28 6 views
0

Pour mon projet, j'ai besoin de compiler Qt 5.9.1 pour un périphérique ARM générique. J'ai mis en place la chaîne d'outils de linaro. Mais Qt à ce configurer arrête:La chaîne d'outils ARM recherche le mauvais répertoire pour les bibliothèques

/usr/bin/arm-linux-gnueabihf-g++ -mfloat-abi=hard --sysroot=/mnt/elvees-rootfs/ -Wl,-O1 -fuse-ld=gold -o verifyspec verifyspec.o
/usr/bin/arm-linux-gnueabihf-ld.gold: error: /lib/libc.so.6: incompatible target /usr/bin/arm-linux-gnueabihf-ld.gold: error: cannot open /lib/ld-linux-armhf.so.3: No such file or directory /usr/bin/arm-linux-gnueabihf-ld.gold: error: /lib/libc_nonshared.a(elf-init.oS): incompatible target ../sysdeps/arm/start.S:124: error: undefined reference to '__libc_start_main' ../sysdeps/arm/start.S:128: error: undefined reference to 'abort' ../sysdeps/arm/start.S:113: error: undefined reference to '__libc_csu_fini' ../sysdeps/arm/start.S:120: error: undefined reference to '__libc_csu_init' collect2: error: ld returned 1 exit status

Des regards de celui-ci, le bras-linux-gnueabihf-g ++ cherche libs dans d'hôte/lib /, au lieu de la sysroot de. Une raison pour un tel comportement et comment le réparer? Mon meilleur pari est les liens symboliques cassés dans le sysroot monté, mais j'ai manuellement changé le "libc.so.6" un, et la sortie est toujours la même chose. Pour clarifier, l'hôte et la cible exécutent Arch.

Modifier

Sur demande, voici mon qmake.conf (qui génère mkspec):

include(../common/linux_device_pre.conf) 

ELVEES_CFLAGS    = -march=armv7-a -mtune=cortex-a9 -mfpu=neon-fp16 -DLINUX=1 
QMAKE_CFLAGS   += $$ELVEES_CFLAGS 
QMAKE_CXXFLAGS   += $$ELVEES_CFLAGS 

DISTRO_OPTS += hard-float 

QT_QPA_DEFAULT_PLATFORM = eglfs 

include(../common/linux_arm_device_post.conf) 

QMAKE_INCDIR_EGL  = /mnt/elvees-rootfs/usr/include/EGL 
QMAKE_LIBDIR_EGL  = /mnt/elvees-rootfs/usr/lib 
QMAKE_INCDIR_OPENGL_ES2 = /mnt/elvees-rootfs/include/GLES2 
QMAKE_LIBDIR_OPENGL_ES2 = /mnt/elvees-rootfs/usr/lib 

QMAKE_LIBS_EGL   = -lEGL 
QMAKE_LIBS_OPENGL_ES2 = -lGLESv2 $${QMAKE_LIBS_EGL} 

load(qt_config) 

Et ce sont les options de qt_config:

./configure \ 
-opengl es2 \ 
-device arch-elvees-g++ \ 
-device-option CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- \ 
-sysroot /mnt/elvees-rootfs/ \ 
-opensource \ 
-confirm-license \ 
-optimized-qmake \ 
-release \ 
-make libs \ 
-prefix /opt/qt-elvees\ 
-no-pch \ 
-nomake examples \ 
-nomake tests \ 
-no-xcb \ 
-eglfs \ 
-v 
+0

Je vous recommande fortement de le faire sur un Raspberry Pi avec Raspbian. Ne perdez pas votre temps avec le compilateur croisé. –

+0

ce que mkspec pour la compilation croisée de qt utilisez-vous? Ajoutez-le à votre message pour clarifier la question. – fghj

+0

@TheQuantumPhysicist Chose amusante, j'ai environ 3 pi qui traînent avec qt croisées. Mais l'objectif du projet est de porter Qt sur ce périphérique ** spécifique **. Donc, je suis un peu hors des options ici. Mais merci pour un conseil de toute façon – DarkMalex

Répondre

1

Apparemment, l'ajout -no-gcc-sysroot paramètre à configurer travaillé.