호스트 개발환경 : 윈도우7
Step 1. 라즈베리파이 운영체제 설치
https://www.raspberrypi.org/downloads/raspbian/
RASPBIAN STRETCH 이미지를 다운로드 받고 sd메모리에 쓰고 부팅하여 ssh를 활성화 한다.
Step 2. 라즈베리파이 툴체인 다운로드
http://gnutoolchains.com/raspberry/
두가지 툴체인을 다운로드 받아야 하는데 최신 툴체인(raspberry-gcc6.3.0)에는 타겟(라즈베리파이3)과 sysroot 동기화 툴이 존재하지 않는다.
그래서 raspberry-gcc-4.9.2-r4 를 먼저 설치하고 동기화툴을 복사해오는 과정이 필요하다.
먼저 raspberry-gcc-4.9.2-r4를 설치하고 설치된 폴더에서 TOOLS 폴더를 raspberry-gcc6.3.0 설치 폴더에 복사한다.
이제 <SysGCC>\raspberry\TOOLS의 UpdateSysroot.bat를 실행한다.
Select를 클릭하고 라즈베리파이의 주소 및 계정정보를 입력 후 connect한다.
아래 그림과 같이 동기화 디렉토리들을 명시하고 Synchronize를 클릭한다.
그러면 라즈베리파이에서 위에 명시한 디렉토리들의 항목들을 가져오면서 sysroot 동기화가 될 것이다.
(동기화 작업은 라즈베리파이에 새로운 패키지를 설치하거나의 변화가 있을때 다시 해줘야한다.)
Step 3. Qt5.10 소스코드 다운로드 및 설치
온라인 인스톨러 다운로드 후 5.10(소스코드포함) 및 mingw530을 체크하여 설치한다. (기본 C:\ 에 설치한다.)
https://www.qt.io/download
Step 4. Qt 빌드
C:\Qt\raspberry_pi 폴더 생성(최종 인스톨될 폴더)
C:\Qt\5.10.0\raspberrypi3 폴더생성
시작 - Qt - 5.10.0 - MinGW 5.3.0 (32-bit) - Qt 5.10.0 for Desktop (MinGW 5.3.0 32 bit) 실행
C:\Qt\5.10.0\raspberrypi3 로 이동
아래 명령을 통해 컴파일러 전체경로가 나오는지 확인하고 그렇지 않다면 툴체인 경로를 환경변수에 등록해줘야 한다.
C:\Qt\5.10.0\raspberrypi3>which arm-linux-gnueabihf-g++
configure실행 (여기서는 opengl es2 옵션 추가 및 QPA플러그인으로 EGLFS로 선택된다. 또한 빠른 빌드를 위해 예제를 포함한 몇가지는 제외하였다.)
만약 x윈도우 시스템에서 동작 되길 원한다면 다음 글을 참고하자: https://forum.qt.io/topic/83700/raspberry-pi-3-compile-with-x11-eglf-not-wanted/5
C:\Qt\5.10.0\raspberrypi3>..\Src\configure -opensource -confirm-license -release -opengl es2 -device linux-rasp-pi3-g++ -device-option CROSS_COMPILE="C:\SysGCC\raspberry\bin\arm-linux-gnueabihf-" -prefix /usr/local/qt5pi -extprefix "C:\Qt\raspberry_pi" -hostprefix "C:\Qt\raspberry_pi" -nomake examples -nomake tests -no-use-gold-linker -qt-pcre -skip qtscript -skip qttools -skip qtserialbus
C:\Qt\5.10.0\raspberrypi3>mingw32-make -j4 C:\Qt\5.10.0\raspberrypi3>mingw32-make install
위과정을 거치면 컴파일된 라이브러리들이 C:\Qt\raspberry_pi 폴더에 인스톨 된다. (python이 설치되어 있지 않으면 실패할 수 도 있다.)
Step 5. 배포
<SysGCC>\raspberry\TOOLS\PortableSmartty 에 있는 SmarTTY를 이용하거나 다른 SSH 클라이언트를 이용하여 라즈베리파이에 접속한다.
그다음 /usr/local/qt5pi 디렉토리를 만든다. (아래 명령 참고)
pi@raspberrypi:/opt $ cd /usr/local/ pi@raspberrypi:/usr/local $ sudo mkdir qt5pi pi@raspberrypi:/usr/local $ sudo chown pi qt5pi/
이제 컴파일된 라이브러리들을 타겟에 배포 하기위해 WinSCP를 다운로드하고 설치한다. (SmarTTY의 SCP 기능으로도 가능하다)
https://winscp.net/
WinSCP를 실행하고 타겟에 접속한다.
/usr/local/qt5pi 디렉토리로 업로드
업로드는 몇 분 정도 소요된다.
업로드가 완료되면 이제 라즈베리파이에서 Qt어플리케이션을 실행 시킬 수 있다.
윈도우에서 Qt Creator를 이용하여 라즈베리파이로 원격 실행에 관한 내용은 이곳을 참고하면된다.
2018.12.10 20:30
2018.12.11 21:39
error 정보만 가지고는 어떤 상황인지 파악이 힘들구요.. 환경변수 설정이나 configure 명령등은 어떻게 하셧는지요? 구체적인 작업 내용이 궁금하네요!
2018.12.20 15:41
혹시 perl 을 설치 하셔도 안되시나요?
2018.12.23 21:31
heuryPa 님이 잘 집어 주신거 같습니다!! 윈도우용 perl을 설치하셔야 되요. (글에 언급이 없었네요ㅠㅠ)
http://strawberryperl.com/
2019.06.07 18:33
안녕하세요..
configure실행시 아래와같은 에러가 뜨는데... 어떻게해야할까요..
Error: No device matching 'linux-rasp-pi3-g++'.
QT5.8.0 에서 진행했습니다.
QT5.11.1 과 5.10.0으로도 해보았으나 이 두개는 cconfigure조차 안먹혀요...아래와 같은 에러로 말이죠...
Please make sure to unset the QMAKESPEC, XQMAKESPEC, QMAKEPATH,
and QMAKEFEATURES environment variables prior to building Qt.
2019.06.08 21:17
호스트용 mingw 설치하셧는지랑 툴체인 경로가 환경변수에 추가되어있는지 살펴보시구요.
그리고 Qt5.8은 configure시 -device linux-rasp-pi-g++ 이렇게 넣어주셔야 합니다.
주의사항은 본문에서 설명한 GCC6.3버전과 Qt5.8이 안맞을 수 있습니다.
2019.08.08 02:49
쭉 따라서 하고 있었는데 minGW에서 which 명령어 사용하는 부분부터 완전히 막혔는데 도움을 주실수 있나요? which는 내부 또는 외부 명령, 실행할 수 있는 프로그램 또는 배치 파일이 아니라고 하고
..\Src\configure -opensource -confirm-license -release -opengl es2 -device linux-rasp-pi3-g++ -device-option CROSS_COMPILE="C:\SysGCC\raspberry\bin\arm-linux-gnueabihf-" -prefix /usr/local/qt5pi -extprefix "C:\Qt\raspberry_pi" -hostprefix "C:\Qt\raspberry_pi" -nomake examples -nomake tests -no-use-gold-linker -qt-pcre -skip qtscript -skip qttools -skip qtserialbus
부분도 지정된 경로를 찾을 수 없다고 합니다.
몇시간째 검색을 해봐도 나오지 않아 질문드립니다.
2019.08.20 09:49
configure 옵션에 아래 내용을 추가해 보세요.
-sysroot C:/SysGCC/raspberry/arm-linux-gnueabihf/sysroot
2020.02.06 23:30
안녕하세요 Synchronize sysroot 중에 이런 에러가 발생하였습니다. 인터넷에 검색하여 (https://slic.tistory.com/1199) win32 긴 경로를 설정해주었는데도 동일하게 에러가 발생합니다. 이럴 경우에 라즈베리파이 OS를 다시 설치하는 것이 좋을까요?
2020.02.07 15:15
라즈비안 OS 재 설치로 해결하였습니다.
2020.02.07 16:40
라즈베리파이4의 경우에는 C:\Qt\5.10.0\raspberrypi3>..\Src\configure -opensource -confirm-license -release -opengl es2 -device linux-rasp-pi3-g++ -device-option CROSS_COMPILE="C:\SysGCC\raspberry\bin\arm-linux-gnueabihf-" -prefix /usr/local/qt5pi -extprefix "C:\Qt\raspberry_pi" -hostprefix "C:\Qt\raspberry_pi" -nomake examples -nomake tests -no-use-gold-linker -qt-pcre -skip qtscript -skip qttools -skip qtserialbus
-device 부분에 어떻게 써야하나요??
2020.02.08 11:49
라즈베리파이4를 대상으로는 아직 해볼지 못했습니다만 -device 옵션을 제외하고 다른 configure 옵션은 크게 다르지 않을 것으로 예상합니다.
2021.06.30 09:22
질문드립니다.
toolchain을 설치했습니다. 8.3.0 ver
Tools 폴더가 없습니다. 버전업이 되면서 사라진듯한데 다른 방법은 없나요?
2021.06.30 09:45
오래전에 자료실에 올려둔 것이 있네요. https://makersweb.net/download/6242
2021.06.30 13:27
synchronize sysroot tool은 따로 버전별로 업데이트 되고 있진 않은가보군요
답변 감사드립니다.
2021.06.30 16:32
질문 있습니다. 환경 변수는 자동으로 들어가 있었고 Makersweb님이 올려두신대로 했는데 여러가지 문제가 있네요
제가 크로스컴파일에대해서 제로베이스에서 시작하다 보니 기초적인것 부터 막히네요 ㅡㅜ
2021.07.02 09:16
2021.07.22 14:10
하...크로스컴파일 처음입니다.
arm-linux-gnueabihf-g++ (Raspbian 8.3.0-6+rpi1) 8.3.0
gcc6.3, 윈도우10 64bit 머신, Qt5.15.1버전, 라즈베리5 환경입니다.
빌드를 했는데, 다음과 같은 에러가 납니다.. 어떻게 해야 할까요?
+ cd qtbase
+ C:\Qt\5.15.1\Src\qtbase\configure.bat -top-level -sysroot C:/SysGCC/raspberry/arm-linux-gnueabihf/sysroot -opensource -confirm -license -release -opengl es2 -device linux-raps-pi2-g++ -platform win32-g++ -device-option CROSS_COMPILE="C:\SysGCC\raspberry\bin\arm-linux-gnueabihf-g++" -prefix /usr/local/qt5pi -extprefix "C:\Qt\5.15.1\raspberry_pi" -hostprefix "C:\Qt\5.15.1\raspberry_pi" -nomake examples -nomake tests -no-use-gold-linker -qt-pcre -skip qttools -skip qtserialbus
Bootstrapping qmake ...
g++ -c -o qmakebuiltins.o -DUNICODE -DMINGW_HAS_SECURE_API=1 -std=c++11 -ffunction-sections -g -IC:/Qt/5.15.1/Src/qtbase/qmake -IC:/Qt/5.15.1/Src/qtbase/qmake/library -IC:/Qt/5.15.1/Src/qtbase/qmake/generators -IC:/Qt/5.15.1/Src/qtbase/src/3rdparty/tinycbor/src -IC:/Qt/5.15.1/Src/qtbase/qmake/generators/unix -IC:/Qt/5.15.1/Src/qtbase/qmake/generators/win32 -IC:/Qt/5.15.1/Src/qtbase/qmake/generators/mac -IC:/Qt/5.15.1/Src/qtbase/include -IC:/Qt/5.15.1/Src/qtbase/include/QtCore -IC:/Qt/5.15.1/Src/qtbase/include/QtCore/5.15.1 -IC:/Qt/5.15.1/Src/qtbase/include/QtCore/5.15.1/QtCore -I../src/corelib/global -IC:/Qt/5.15.1/Src/qtbase/mkspecs/win32-g++ -DQT_VERSION_STR=\"5.15.1\" -DQT_VERSION_MAJOR=5 -DQT_VERSION_MINOR=15 -DQT_VERSION_PATCH=1 -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL -DQT_NO_FOREACH C:/Qt/5.15.1/Src/qtbase/qmake/library/qmakebuiltins.cpp
C:/Qt/5.15.1/Src/qtbase/qmake/library/qmakebuiltins.cpp: In member function 'QByteArray QMakeEvaluator::getCommandOutput(const QString&, int*) const':
C:/Qt/5.15.1/Src/qtbase/qmake/library/qmakebuiltins.cpp:542:104: error: '_popen' was not declared in this scope
+ QLatin1String(" && ") + args).toLocal8Bit().constData(), QT_POPEN_READ)) {
^
C:/Qt/5.15.1/Src/qtbase/qmake/library/qmakebuiltins.cpp:550:32: error: '_pclose' was not declared in this scope
int ec = QT_PCLOSE(proc);
^
C:/Qt/5.15.1/Src/qtbase/qmake/library/qmakebuiltins.cpp: In member function 'QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinExpand(const QMakeInternal::QMakeBuiltin&, const ProKey&, const ProStringList&, ProStringList&)':
C:/Qt/5.15.1/Src/qtbase/qmake/library/qmakebuiltins.cpp:1240:25: error: 'KEY_WOW64_32KEY' was not declared in this scope
flags = KEY_WOW64_32KEY;
^~~~~~~~~~~~~~~
C:/Qt/5.15.1/Src/qtbase/qmake/library/qmakebuiltins.cpp:1243:25: error: 'KEY_WOW64_64KEY' was not declared in this scope
flags = KEY_WOW64_64KEY;
^~~~~~~~~~~~~~~
Makefile:259: recipe for target 'qmakebuiltins.o' failed
mingw32-make: *** [qmakebuiltins.o] Error 1
2022.06.08 15:35
공유해주셔서 감사합니다.
진행 중에 아래와 같은 오류 메시지가 발생합니다.
ERROR: The OpenGL functionality tests failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2],
QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform.
라즈베리파이와 동기화하면서 라즈베리파이에서 가져와야할 파일이 없어서 그럴까요?
2022.06.11 15:36
Raspberry Pi 4 이전의 경우 Raspbian OS 이미지에서 제공하는 EGL 및 GLES 라이브러리를 권장합니다. 일반적으로 /opt/vc/lib 에 있습니다. 참고로 Raspberry Pi 4는 GPU가 이전 버전과 다르기 때문에 vc 라이브러리를 사용하는 대신 Mesa를 사용해야 합니다.
여기다 질문을 남겨도 될지 모르겠습니다만은...
이 글 내용을 그대로 따라했는데요.
configure 명령에서는 warning 이 한개 뜨긴 합니다만 일단은 정상적으로 된것 같은데, (혹시나 싶어 python도 설치하였습니다.)
mingw32-make 명령에서 error가 발생합니다.
에러 내용은 이러합니다.
c:/sysgcc/raspberry/bin/../lib/gcc/arm-linux-gnueabihf/6/../../../../arm-linux-gnueabihf/bin/ld.exe:QtCore.version:0: syntax error in VERSION script
collect2.exe: error: ld returned 1 exit status
mingw32-make[3]: *** [Makefile:1136: ..\..\lib\libQt5Core.so.5.10.0] Error 1
mingw32-make[3]: Leaving directory 'C:/Qt/5.10.0/raspberrypi3/qtbase/src/corelib'
mingw32-make[2]: *** [Makefile:225: sub-corelib-make_first] Error 2
mingw32-make[2]: Leaving directory 'C:/Qt/5.10.0/raspberrypi3/qtbase/src'
mingw32-make[1]: *** [Makefile:49: sub-src-make_first] Error 2
mingw32-make[1]: Leaving directory 'C:/Qt/5.10.0/raspberrypi3/qtbase'
mingw32-make: *** [Makefile:80: module-qtbase-make_first] Error 2
구글링을 며칠째 하고 있는데 도저히 답이 안나오네요.
이부분에 대해서 아시면 답변 좀 부탁드립니다.