Não é possível construir QTAV para cubieboard2 em Cubian

2

Estou tentando fazer QTAV lib para cubieboard2 ambiente e problemas. Você poderia, por favor, ajudar?

Aqui está o que qmake diz:

cubie@Cubian:~/QtAV/output$ qmake ../QtAV.pro
Project MESSAGE: BUILD_DIR=/home/cubie/QtAV/output
Info: creating cache file /home/cubie/QtAV/output/.qmake.cache
Project MESSAGE: target arch: arm
Project MESSAGE: target arch features:
Project MESSAGE: To disable config tests, you can use 1 of the following methods
Project MESSAGE: 1. create '.qmake.conf' in the root source dir, add 'CONFIG += no_config_tests'(Qt5)
Project MESSAGE: 2. pass 'CONFIG += no_config_tests' or '-config no_config_tests' to qmake
Project MESSAGE: 3. add 'CONFIG += no_config_tests' in /home/cubie/QtAV/user.conf
Project MESSAGE: To manually set a config test result to true, disable config tests and enable config_name like above
Checking for avutil... yes
Checking for avcodec... yes
Checking for avformat... yes
Checking for swscale... yes
Project MESSAGE: checking for optional features...
Checking for swresample... yes
Checking for avresample... no
Checking for gl... yes
Checking for avfilter... yes
Checking for sse4_1... no
Checking for openal... no
Checking for portaudio... yes
Checking for direct2d... no
Checking for gdiplus... no
Checking for dxva... no
Checking for xv... yes
Checking for vaapi... yes
Checking for libcedarv... yes
Project MESSAGE: To recheck the dependencies, delete '.qmake.cache' in the root of build dir, run qmake with argument 'CONFIG+=recheck' or '-config recheck’

Então eu faço e aqui está a última mensagem:

g++ -c -pipe -isystem /home/cubie/QtAV/src -isystem /home/cubie/QtAV/src/.. -O2 -Wall -W -D_REENTRANT -fPIC -DBUILD_QTAV_LIB -D__STDC_CONSTANT_MACROS -DQTAV_HAVE_AVFILTER=1 -DQTAV_HAVE_SWRESAMPLE=1 -DQTAV_HAVE_PORTAUDIO=1 -DQTAV_HAVE_XV=1 -DQTAV_HAVE_GL=1 -DQTAV_HAVE_CUDA=1 -DQTAV_HAVE_VAAPI=1 -DQTAV_HAVE_CEDARV=1 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/local/Qt-5.3.1/mkspecs/linux-g++ -I/home/cubie/QtAV/src -I/usr/local/Qt-5.3.1/include -isystem /home/cubie/QtAV/src -I/home/cubie/QtAV -isystem /home/cubie/QtAV/src/QtAV -isystem /home/cubie/QtAV/src/cuda -isystem /home/cubie/QtAV/src/cuda/dllapi -I/usr/local/Qt-5.3.1/include/QtOpenGL -I/usr/local/Qt-5.3.1/include/QtWidgets -I/usr/local/Qt-5.3.1/include/QtGui -I/usr/local/Qt-5.3.1/include/QtCore -I.moc/5.3.1/QtAV -I. -o .obj/QtAV_linux_arm/VideoDecoderCedarv.o /home/cubie/QtAV/src/VideoDecoderCedarv.cpp
{standard input}: Assembler messages:
{standard input}:730: Error: selected processor does not support Thumb mode 'vuzp.8 d0,d1'
{standard input}:731: Error: selected processor does not support Thumb mode 'vuzp.8 d2,d3'

Estou usando Cubian (clone do Debian para cubieboard):

cubie@Cubian:~/QtAV/output$ uname -a
Linux Cubian 3.4.75-sun7i #35 SMP PREEMPT Sat Feb 8 02:10:31 CST 2014 armv7l GNU/Linux

Aqui está minha versão do gcc:

cubie@Cubian:~/QtAV/output$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/4.6/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Debian 4.6.3-14' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-sjlj-exceptions --with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
gcc version 4.6.3 (Debian 4.6.3-14)

Aqui está o meu cpuinfo

cubie@Cubian:~$ cat /proc/cpuinfo
Processor   : ARMv7 Processor rev 4 (v7l)
processor   : 0
BogoMIPS    : 2004.17

processor   : 1
BogoMIPS    : 2011.05

Features    : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part    : 0xc07
CPU revision    : 4

Hardware    : sun7i
Revision    : 0000
Serial      : 0000000000000000
Chipid      : 16516592-80826652-56484848-088254ea

cubie@Cubian:~$ gcc -dumpmachine
arm-linux-gnueabihf

O que poderia estar errado?

    
por Serafim Suhenky 15.07.2014 / 07:35

1 resposta

0

Seu problema está aqui:

{standard input}: Assembler messages:
{standard input}:730: Error: selected processor does not support Thumb mode 'vuzp.8 d0,d1'
{standard input}:731: Error: selected processor does not support Thumb mode 'vuzp.8 d2,d3'

Explicação

De Algumas coisas que os desenvolvedores iOS deveriam saber sobre o processador ARM :

Thumb

The Thumb instruction set is a subset of the ARM instruction set, compressed so that instructions take only 16 bits (all ARM instructions are 32 bits in size; Thumb is still a 32-bit architecture, just the instructions take less space). It is not a different architecture, rather is should be seen as a shorthand for the most common ARM instructions and functionality. The advantage, of course, is that it allows an important reduction in code size, saving memory, cache, and code bandwidth; while this is more useful in microcontroller type applications where it allows hardware savings in the memory used, it is still useful on iOS devices, and as such it is enabled by default in Xcode iOS projects. The code size reduction is nice, but never actually reaches 50% as sometimes two Thumb instructions are required for one equivalent ARM instruction. ARM and Thumb instructions cannot be freely intermixed, the processor needs to switch mode when going from one to the other; this can only occur when calling or returning from a function. So a function has to either be Thumb or ARM as a whole; in practice you do not control whether code is compiled for Thumb or ARM at the function granularity but rather at the source file granularity.

Do Debian Wiki em Armar Flutuantes Duros

Triplet

GCC when built to target the GNU arm-linux-gnueabi triplet will support both the hard-float and soft-float calling conventions.

dpkg relies on the triplet to identify the port (gcc -dumpmachine output). Some other projects such as multiarch rely on having distinct triplets across all Debian architectures.

One option would be to use the vendor field in the triplet to have distinct triplets. For instance, the triplet could be arm-hardfloat-linux-gnueabi.

arm-none-linux-gnueabi, just like in CodeSourcery compilers, would be an option but it is confusing to relate to arm-linux-gnueabi versus arm-none-linux-gnueabi; it is clearer to relate to arm-hardfloat-linux-gnueabi and also allows distinguishing between CodeSourcery and the new port.

The final descision was to use a triplet of arm-linux-gnueabihf

Em suma, a mensagem de erro postada acima indica que o compilador em sua configuração atual não suporta parte ou todo o Conjunto de instruções do polegar . Embora eu não possa dizer se outro compilador está disponível, posso dizer que você precisa verificar duas coisas:

  1. Você verificou que o compilador suporta o seu modelo listado aqui ?
  2. Você configurou o ambiente QTAV, conforme descrito no Wiki?

Como uma nota lateral, e não para falar sobre o meu chifre de distros, mas você já pensou em usar Gentoo no ARM

Outras coisas que você pode precisar:

CHOST="armv7a-hardfloat-linux-gnueabi" CFLAGS="-O2 -march=armv7-a -mtune=cortex-a(7 or 8) -mfpu=vfpv3-d16 -mfloat-abi=hard -pipe -fomit-frame-pointer" CXXFLAGS="${CFLAGS}"

    
por 23.07.2014 / 18:32