qt build arm debian libc

Error de reubicación de Libm al construir Qt 5 para Nitrogen6x



build arm (2)

libm.a (mpa.o): la reubicación R_ARM_THM_MOVW_ABS_NC contra `a local symbol ''no se puede usar cuando se hace un objeto compartido

Traducción: está tratando de vincular un archivo de objeto compilado no- -fPIC ( mpa.o de libm.a ) en una biblioteca compartida. No puedes hacer eso.

Necesita encontrar / instalar libm.so para su destino, o configurar qt5 para no compilar la biblioteca compartida (posiblemente con la opción --disable-shared ).

Estoy intentando construir Qt 5 en una placa Nitrogen6x con un * i.MX6Q`.

Instalé Debian / wheezy en la placa y uso una máquina Ubuntu 12.10 para la compilación cruzada.

La configuración de Qt funciona como un amuleto, pero estoy atascado en el paso de hacer. Este es el script de configuración que ejecuto:

./configure -v -opensource -confirm-license -reduce-relocations -no-pch -no-xcb -no-opengl -opengl es2 -qt-libpng -qt-zlib -qt-xkbcommon -qt-xcb -qt-pcre -qt-libjpeg -qt-sql-mysql -optimized-qmake/ -make libs -device imx6 / -compile-examples / -device-option CROSS_COMPILE=/home/finn/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabi- / -sysroot /media/finn/d72e3b65-b529-4e5c-9d30-872e1b0c9973 / -prefix /opt/qt5

Y este es el error que recibo a los 5 minutos del proceso de creación:

/home/finn/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/../../../../arm-linux-gnueabihf/bin/ld: /media/finn/d72e3b65-b529-4e5c-9d30-872e1b0c9973/usr/lib/libm.a(mpa.o): relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol'' can not be used when making a shared object; recompile with -fPIC /media/finn/d72e3b65-b529-4e5c-9d30-872e1b0c9973/usr/lib/libm.a: could not read symbols: Bad value collect2: error: ld returned 1 exit status

Me encontré con el mismo error antes, cuando intentaba acceder a libz.a, pero agregar el parámetro qt-zlib al comando configure solucionó ese problema.

Muchos artículos indican que las aplicaciones / bibliotecas afectadas deben recompilarse; sin embargo, no creo que eso sea posible ya que libm es parte de libc6.

Ya intenté aptitude remove libc6-dev zlib1g-dev g++-4.6 instalarlo usando aptitude remove libc6-dev zlib1g-dev g++-4.6 y apt-get install gcc g++ make flex bison openssl libssl-dev perl perl-base perl-modules libperl-dev build-essential

Lamentablemente, esto no solucionó el problema.

Debian se ha instalado utilizando el instalador de red oficial, así como un núcleo y una superposición proporcionada por Boundarydevices, el fabricante de la placa.

¿Alguien tiene una idea de cómo solucionar esto?

Mi próximo paso sería instalar un sistema Debian completamente nuevo, pero realmente me gustaría evitarlo.

Editar

La compilación de qtbase con la opción -estática funciona para mí, sin embargo, estoy incurriendo en este error al intentar crear qtdeclarative durante el paso de creación:

/home/finn/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/../../../../arm-linux-gnueabihf/bin/ld: cannot find crt1.o: No such file or directory /home/finn/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/../../../../arm-linux-gnueabihf/bin/ld: cannot find crti.o: No such file or directory /home/finn/qt/qtbase/lib/libQt5Core.a(qlibrary_unix.o): In function `QLibraryPrivate::load_sys()'': qlibrary_unix.cpp:(.text+0xaac): warning: Using ''dlopen'' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /home/finn/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lqxcb /home/finn/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/../../../../arm-linux-gnueabihf/bin/ld: cannot find /lib/arm-linux-gnueabihf/libpthread.so.0 /home/finn/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/../../../../arm-linux-gnueabihf/bin/ld: cannot find /usr/lib/arm-linux-gnueabihf/libpthread_nonshared.a collect2: error: ld returned 1 exit status

Edit 2 - Solución

Solucioné el problema y compilé Qt satisfactoriamente. Todo lo que necesitaba hacer era reinstalar Ubuntu. Seguro que no es una solución elegante pero funciona para mí.


Un poco tarde, pero encontré el problema / solución:

El problema es el sysroot . Normalmente gcc enlaces a bibliotecas compartidas. Pero cuando no puede encontrarlo, gcc usa las bibliotecas estáticas (.a). Cuando mira en [sysroot]/usr/lib/arm-linux-gnueabihf las bibliotecas compartidas no están en este lugar. Solo hay enlaces simbólicos a /lib/arm-linux-gnueabihf . Entonces, gcc busca las bibliotecas compartidas en su host-pc, donde no puede encontrarlas.

Solución

Crea el enlace simbólico correcto. (Aquí hay un ejemplo para libglib, la X es el número de versión)

ln -s [sysroot]/lib/arm-linux-gnueabihf/libglib.so.X / [sysroot]/usr/lib/arm-linux-gnueabihf/libglib.so

(No se olvide de eliminar el enlace simbólico antiguo y crearlo después de compilar con éxito; solo hago lo siguiente antes de compilar:

mv file.so file.so.backup

otra solución

Otra solución es cambiar los enlaces simbólicos absolutos a los relativos. Por ejemplo, si su biblioteca es /lib/arm-linux-gnueabihf/libglib.so.X y necesita un enlace en /usr/lib/arm-linux-gnueabihf/ , simplemente lo hace:

ln -s ../../../lib/arm-linux-gnueabihf/libglib.so.X / [sysroot]/usr/lib/arm-linux-gnueabihf/libglib.so