2017-10-09 2 views
0

라즈베리 파이에 대한 GUI를 개발하기 위해 Qt를 컴파일하려고합니다. https://wiki.qt.io/RaspberryPi2EGLFS라즈베리 파이 3에 Qt를 크로스 컴파일하는 동안 오류가 발생했습니다.

나는이 구성 명령을 사용하고 있습니다 : 이것은 config.log가

/home/vbox/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ -mfloat-abi=hard --sysroot=/home/vbox/raspi/sysroot -Wl,-O1 -Wl,-rpath-link,/home/vbox/raspi/sysroot/opt/vc/lib -Wl,-rpath-link,/home/vbox/raspi/sysroot/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link,/home/vbox/raspi/sysroot/lib/arm-linux-gnueabihf -o verifyspec verifyspec.o  
/home/vbox/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find crt1.o: No such file or directory 
/home/vbox/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find crti.o: No such file or directory 
/home/vbox/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lm 
collect2: error: ld returned 1 exit status 
Makefile:66: recipe for target 'verifyspec' failed 
make: *** [verifyspec] Error 1 
Note: Also available for Linux: linux-clang linux-icc 
ERROR: Cannot compile a minimal program. The toolchain or QMakeSpec is broken.` 

입니다 :

./configure -release -opengl es2 -device linux-rasp-pi3-g++ -device-option \ 
CROSS_COMPILE=~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- \ 
-sysroot ~/raspi/sysroot -opensource -confirm-license \ 
-make libs -no-use-gold-linker -prefix /usr/local/qt5pi \ 
-extprefix ~/raspi/qt5pi -hostprefix ~/raspi/qt5 -v 

이 내가 다시지고있어 오류가입니다 나는이 자습서를 다음되었습니다

[email protected]:~/qtbase$ cat config.log 
Command line: -release -opengl es2 -device linux-rasp-pi3-g++ -device-option CROSS_COMPILE=/home/vbox/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sysroot /home/vbox/raspi/sysroot -opensource -confirm-license -make libs -no-use-gold-linker -prefix /usr/local/qt5pi -extprefix /home/vbox/raspi/qt5pi -hostprefix /home/vbox/raspi/qt5 -v 
executing config test machineTuple 
+ /home/vbox/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ -dumpmachine 
arm-linux-gnueabihf 
test config.qtbase.tests.machineTuple succeeded 
executing config test verifyspec 
+ cd /home/vbox/qtbase/config.tests/verifyspec && /home/vbox/qtbase/bin/qmake "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" "QMAKE_CFLAGS += --sysroot=/home/vbox/raspi/sysroot" "QMAKE_CXXFLAGS += --sysroot=/home/vbox/raspi/sysroot" "QMAKE_LFLAGS += --sysroot=/home/vbox/raspi/sysroot" -early "CONFIG += cross_compile" /home/vbox/qtbase/config.tests/verifyspec 
Info: creating stash file /home/vbox/qtbase/config.tests/.qmake.stash 
+ cd /home/vbox/qtbase/config.tests/verifyspec && MAKEFLAGS= /usr/bin/make 
/home/vbox/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ -c -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8 -mfloat-abi=hard --sysroot=/home/vbox/raspi/sysroot -O2 -std=gnu++11 -w -fPIC -I. -I/home/vbox/qtbase/mkspecs/devices/linux-rasp-pi3-g++ -o verifyspec.o verifyspec.cpp 
/home/vbox/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ -mfloat-abi=hard --sysroot=/home/vbox/raspi/sysroot -Wl,-O1 -Wl,-rpath-link,/home/vbox/raspi/sysroot/opt/vc/lib -Wl,-rpath-link,/home/vbox/raspi/sysroot/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link,/home/vbox/raspi/sysroot/lib/arm-linux-gnueabihf -o verifyspec verifyspec.o /home/vbox/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find crt1.o: No such file or directory 
/home/vbox/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find crti.o: No such file or directory 
/home/vbox/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lm 
collect2: error: ld returned 1 exit status 
Makefile:66: recipe for target 'verifyspec' failed 
make: *** [verifyspec] Error 1 

여기서부터 어디로 가야할지 모르겠다. 디버깅을 시작할 수 있을지 모르겠다. 이 문제. 대체 toolchains를 사용할 수 있습니까? 아니면 QMakeSpec의 문제입니까? 시도 할 것들에 대한 제안은 매우 유용 할 것입니다.

+1

이이 오류의 중요한 부분입니다 : '''/ 빈/LD : 그것은 일반적으로 -lm ''' 찾을 수

내가 도움이 될 수있는이 블로그를 썼다 빌드 도구의 결과가 제대로 설치되지 않았습니다. 예를 들어 Ubuntu에서는'build-essential'을 설치하여이 문제를 해결할 수 있습니다. 그래도 라스베리 파이 (Raspberry Pi)의 뿌리 줄기로 무엇을해야하는지 잘 모르겠습니다. 튜토리얼 단계를 다시 한 번 시도해보고 설치 단계를 빠뜨리지 않았는지 확인하십시오. 그래도 작동하지 않으면 다른 사람이'ld'에 문제가있어 나무 딸기 파이에'-lm'을 찾지 못했는지 확인하고 검색하십시오. – dragly

답변

1

이 블로그 게시물도 그것을 않습니다 아마 RPi3에 대한보다 구체적인 것, 그리고 (마지막 2017년 1월 12일) : 당신의보고있는 위키에 주석이

https://medium.com/@amirmann/how-to-cross-compile-qt-for-raspberry-pi-3-on-linux-ubuntu-for-beginners-75acf2a078c

sudo apt-get upgrade 
sudo apt-get update 
sudo apt-get install libgl1-mesa-dev 
... 
sudo apt-get build-dep qt5-default 
sudo apt-get install libxcb-xinerama0-dev 
sudo apt-add-repository ppa:u-szeged/sedkit 
sudo apt-get update 
sudo apt-get install sedkit-env-qtwebkit 
sudo apt-get install build-essential perl python git 
sudo apt-get install “^libxcb.*” libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev 
sudo apt-get install flex bison gperf libicu-dev libxslt-dev ruby 
sudo apt-get install libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libfontconfig1-dev libcap-dev libxtst-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libxss-dev libegl1-mesa-dev gperf bison 
sudo apt-get install libbz2-dev libgcrypt11-dev libdrm-dev libcups2-dev libatkmm-1.6-dev 
sudo apt-get install libasound2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev 

그들이 새로운 빌드에서 작동하도록 한 몇 가지 사항. 여기에 위키 페이지의 역사의 일부는 다음과 같습니다

https://wiki.qt.io/index.php?title=RaspberryPi2EGLFS&type=revision&diff=31538&oldid=30634

다음 장치 생성 라이선스 Qt는 버전 다음 사용하는 것이이 지침이 :

http://doc.qt.io/QtForDeviceCreation/qtee-preparing-hardware-rasberrypi.html

난 항상 가지고는 스크래치 (Scratch)에서 리눅스 기사를 파헤치는 동안 많은 것을 배웠다. Qt를 최근 구축 한 곳에서는 아무 도움이 없었습니다.

http://www.linuxfromscratch.org/blfs/view/8.0/x/qt5.html

그 링크가 도움이 바랍니다.

+0

링크 된 첫 번째 튜토리얼을 사용하기 시작했지만 '오류 : OpenGL 기능 테스트가 실패했습니다!'라즈베리 파이에 libgles2-mesa-dev를 설치하고 rsync를 사용하여 라이브러리를 얻는 방법으로 문제를 해결할 수있었습니다. 우분투에 방금 설치 한 경우 픽스가 도움이되지 않는 것 같습니다. – gotarchery

0

이것은 raspberry-pi 용 Qt를 크로스 컴파일하기위한 내 bash 스크립트입니다. 명령 <script name> <TcpIp of Raspberrry> $USER

#!/bin/bash 
RASP_ADR=$1 
USERNAME=$2 
if [ ! $RASP_ADR ] 
then 
     echo "Error: need Ip address" 
    exit 1 
fi 

LOGFILE=install.log.txt 
rm -f $LOGFILE 

ID_RSA=/root/.ssh/cu4_rsa 

SSH="ssh -i $ID_RSA [email protected]$RASP_ADR" 

DEST=~/raspi 

QT_VERSION=5.9 

function log { 
    local t=`date` 
     echo "[$t] [email protected]" | tee -a $LOGFILE 
} 

function remote_src { 
     local message 
     local exitcode 
     message=$1 
     shift 
     log $message 
     log "Remote $RASP_ADR command: [email protected]" 
     OUT=`$SSH "[email protected]" | tee /dev/tty | tee -a $LOGFILE` 
     exitcode=$? 
     if [ $exitcode -ne 0 ]; then 
       log "Exit with ERROR $exitcode" 
       exit $exitcode 
     fi 
} 

function local_src { 
     local message 
     local exitcode 
     message=$1 
     shift 
     log $message 
     log "Local command: [email protected]" 
     OUT=`bash -c "[email protected]" | tee /dev/tty | tee -a $LOGFILE` 
     exitcode=$? 
     if [ $exitcode -ne 0 ]; then 
       log "Exit with ERROR $exitcode" 
       exit $exitcode 
     fi 
} 

function Append_Qt_Module { 
     local QtModule 
     QtModule=$1 
     log "install $QtModule" 
     local_src \ 
     "Clone $QtModule Qt-module" \ 
     "cd $DEST && git clone git://code.qt.io/qt/$QtModule.git -b $QT_VERSION" 
     local_src \ 
     "Make $QtModule Qt-module" \ 
     "cd $DEST/$QtModule && $DEST/qt5/bin/qmake -r && make && make install" 
     local_src \ 
     "Synchronize qt5pi with Raspberry pi" \ 
     "rsync -avz -e \"ssh -i $ID_RSA\" $DEST/qt5pi [email protected]$RASP_ADR:/usr/local" 
} 

local_src \ 
"open key -> Raspberry" \ 
"cat /root/.ssh/cu4_rsa.pub | ssh [email protected]$RASP_ADR \"sudo cat - > authorized_keys; sudo mkdir -p /root/.ssh; sudo mv authorized_keys /root/.ssh; sudo chown -R root:root /root/.ssh\"" 

remote_src \ 
"Update System" \ 
"apt-get update" 

remote_src \ 
"Upgrade System" \ 
"apt-get -y upgrade" 

remote_src \ 
"Install Synaptic" \ 
"apt-get -y install synaptic" 

remote_src \ 
"Install Qt libraries" \ 
"apt-get -y install libfontconfig1-dev libdbus-1-dev libudev-dev" 

remote_src \ 
"Install Xcb" \ 
"apt-get -y install \"^libxcb.*\" libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev" 

remote_src \ 
"Install Qt-WebKit" \ 
"apt-get -y install flex bison gperf libicu-dev libxslt-dev ruby" 

remote_src \ 
"Install Qt WebEngine" \ 
"apt-get -y install libssl-dev libxcursor-dev libxcomposite-dev libxrandr-dev" 

remote_src \ 
"Install Qt Multimedia" \ 
"apt-get -y install libasound2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev" 

DEB_SRC="deb-src http://archive.raspbian.org/raspbian/ jessie main contrib non-free rpi" 
remote_src \ 
"Проверка открытости deb_src" \ 
"cat /etc/apt/sources.list | grep -s -G '^$DEB_SRC' | cat" 

if [ ! "$OUT" ] 
then 
    remote_src \ 
    "Открываем комментарии" \ 
    "echo '$DEB_SRC' >> /etc/apt/sources.list" 
else 
    log "DEB_SRC открыты ранее" 
fi 

remote_src \ 
"Update System" \ 
"apt-get update" 

remote_src \ 
"Build dependences for qt4-x11" \ 
"apt-get -y build-dep qt4-x11" 

remote_src \ 
"Build dependences for libqt5gui5" \ 
"apt-get -y build-dep libqt5gui5" 

remote_src \ 
"Install more libs for Xcb" \ 
"apt-get -y install libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0" 

remote_src \ 
"Make dir for Qt libs" \ 
"mkdir /usr/local/qt5pi; chown pi:pi /usr/local/qt5pi" 

remote_src \ 
"Reboot" \ 
"reboot" 

while true; do 
    sleep 1s 
    log "wait..." 
    $SSH "echo done" 
    if [ $? -eq 0 ]; then break; fi 
done 

local_src \ 
"Install Git" \ 
"apt-get -y install git && mkdir -p $DEST && cd $DEST" 

local_src \ 
"Clone RaspberryPi tools" \ 
"git clone https://github.com/raspberrypi/tools $DEST/tools" 

local_src \ 
"OR Update Raspberry Pi Tools" \ 
"cd $DEST/tools && git pull origin master" 

fi 

local_src \ 
"Synchronize local computer with Raspberry Pi" \ 
"cd $DEST && mkdir -p /sysroot /sysroot/usr /sysroot/opt && \ 
rsync -avz -e \"ssh -i $ID_RSA\" [email protected]$RASP_ADR:/lib sysroot && \ 
rsync -avz -e \"ssh -i $ID_RSA\" [email protected]$RASP_ADR:/usr/include sysroot/usr && \ 
rsync -avz -e \"ssh -i $ID_RSA\" [email protected]$RASP_ADR:/usr/lib sysroot/usr && \ 
rsync -avz -e \"ssh -i $ID_RSA\" [email protected]$RASP_ADR:/opt/vc sysroot/opt && \ 
rsync -avz -e \"ssh -i $ID_RSA\" [email protected]$RASP_ADR:/usr/local/include sysroot/usr/local && \ 
rsync -avz -e \"ssh -i $ID_RSA\" [email protected]$RASP_ADR:/usr/local/lib sysroot/usr/local" 

local_src \ 
"Get sysroot-relative.py script" \ 
"cd $DEST && wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py && \ 
chmod +x sysroot-relativelinks.py && \ 
./sysroot-relativelinks.py sysroot " 
exit 0 

local_src \ 
"Получаем qtbase версии $QT_VERSION и конфигурируем Qt." 
"`git clone -b $QT_VERSION git://code.qt.io/qt/qtbase.git $DEST/qtbase`" 
local_src \ 
"OR Update qtbase версии $QT_VERSION" \ 
"cd $DEST/qtbase && git pull origin $QT_VERSION" 

local_src \ 
"Конфигурация и установка Qt$QT_VERSION" \ 
"cd $DEST/qtbase && ./configure -release -opengl es2 -device linux-rasp-pi3-g++ \ 
-device-option CROSS_COMPILE=$DEST/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- \ 
-sysroot $DEST/sysroot -opensource -confirm-license -make libs -make tools -qt-pcre -optimized-qmake -reduce-exports \ 
-release -prefix /usr/local/qt5pi -extprefix $DEST/qt5pi -hostprefix $DEST/qt5 -no-use-gold-linker -v && \ 
make -j 4 && make install" 

local_src \ 
"Change owner to $USERNAME on $DEST" \ 
"chown -R $USERNAME:$USERNAME $DEST" 

local_src \ 
"Get new free types from http://dejavu-fonts.org" \ 
"cd $DEST && wget http://sourceforge.net/projects/dejavu/files/dejavu/2.37/dejavu-fonts-ttf-2.37.tar.bz2 && \ 
tar -xvf dejavu-fonts-ttf-2.37.tar.bz2" 

local_src \ 
"Send type to target dir" \ 
"cd $DEST && mkdir -p qt5pi/lib/fonts && \ 
cp dejavu-fonts-ttf-2.37/ttf/DejaVuSansMono.ttf qt5pi/lib/fonts/" 

local_src \ 
"Send libs to RaspberryPi" \ 

"cd $DEST && rsync -avz -e \"ssh -i $ID_RSA\" qt5pi [email protected]$RASP_ADR:/usr/local" 

local_src \ 
"Build Test application" \ 
"cd $DEST/qtbase/examples/opengl/qopenglwidget && \ 
$DEST/qt5/bin/qmake && \ 
make && \ 
scp -i $ID_RSA qopenglwidget [email protected]$RASP_ADR:/home/pi " 

remote_src \ 
"Добавляем пути к библиотекам Qt на Raspberry Pi" \ 
"echo /usr/local/qt5pi/lib | tee /etc/ld.so.conf.d/qt5pi.conf && \ 
ldconfig" 

remote_src \ 
"Устранение неполадок в библиотеке EGL/GLES " \ 
"rm /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 && \ 
ln -s /opt/vc/lib/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 && \ 
ln -s /opt/vc/lib/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 && \ 
ln -s /opt/vc/lib/libEGL.so /opt/vc/lib/libEGL.so.1 && \ 
ln -s /opt/vc/lib/libGLESv2.so /opt/vc/lib/libGLESv2.so.2" 


remote_src \ 
"Запуск теста" \ 
"nohup /home/pi/qopenglwidget > /dev/null 2>&1 &" 

log "Please push the some key when you are ready to next operation" 
read -n1 

remote_src \ 
"Kill test" \ 
"pkill qopenglwidget" 

#Add youre Qt modules 
Append_Qt_Module qtserialport 

remote_src \ 
"Обновляем символьные линки к библиотекам Qt на Raspberry Pi" \ 
"ldconfig" 

log "DONE!!!!" 
exit 0 
0

에 당신이 할 수있는 이 스크립트는 내가 장치가이

VC_LIBRARY_PATH   = $$[QT_SYSROOT]/opt/vc/lib 
VC_INCLUDE_PATH   = $$[QT_SYSROOT]/opt/vc/include 

QMAKE_LIBDIR_OPENGL_ES2 = $${VC_LIBRARY_PATH} 
QMAKE_LIBDIR_EGL  = $$QMAKE_LIBDIR_OPENGL_ES2 
QMAKE_LIBDIR_OPENVG  = $$QMAKE_LIBDIR_OPENGL_ES2 

QMAKE_INCDIR_EGL  = \ 
         $${VC_INCLUDE_PATH} \ 
         $${VC_INCLUDE_PATH}/interface/vcos/pthreads \ 
         $${VC_INCLUDE_PATH}/interface/vmcs_host/linux 
QMAKE_INCDIR_OPENGL_ES2 = $${QMAKE_INCDIR_EGL} 
QMAKE_INCDIR_OPENVG  = $${QMAKE_INCDIR_EGL} 

QMAKE_LIBS_OPENGL_ES2 = -lGLESv2 
QMAKE_LIBS_EGL   = -lEGL -lGLESv2 
QMAKE_LIBS_OPENVG  = -lEGL -lOpenVG -lGLESv2 

같은 linux-rasp-pi3-g++/qmake.conf 파일 및 gcc-linaro-4.9-2015.02-3-x86_64_arm-linux-gnueabihf 툴체인을 사용 mkspec 편집. Build Qt 5.10 for Raspberry Pi 3

+0

자신의 블로그를 홍보하고 싶다면 답안에 귀하의 소속사를 공개해야합니다 **. 그렇지 않으면 응답이 스팸으로 표시 될 수 있습니다. [스패머가되지 않는 방법] (https://stackoverflow.com/help/promotion)을 읽어보십시오. 이번에는 귀하에 대한 제휴 공개를 추가했습니다. 다음 번엔 알고 있어야합니다. – iBug

관련 문제