Sapo kalova në ferr për të konfiguruar Qt Creator, Raspberry Pi dhe Debian 8 (për fletoren time) dhe më në fund arrita të konfiguroja gjithçka. Ose kështu mendova. Ajo që vijon këtu është një përshkrim i asaj që kam bërë deri tani, në mënyrë që disa njerëz të mençur këtu në Stackoverflow të shohin diçka marrëzi që kam bërë (ose nuk e kam bërë :D).
Unë jam duke përdorur platformat e mëposhtme:
- Raspberry Pi 2 ekzekuton Raspbian-in më të fundit - platforma e synuar ku dua të ekzekutoj kodin tim
- 64bit Debian 8 Jessie - platforma e zhvillimit ku dua të zhvilloj kodin tim
Pasi e vendosa SSH-në time në funksion midis notebook-ut tim (Debian) dhe RPi2 (Raspbian) fillova të kërkoja udhëzues se si të konfiguroja C/C++ IDE Qt Creator tim të preferuar për zhvillimin e aplikacioneve për RPi2. Mjeti i projektit është cmake
(po e përmend këtë më poshtë pasi opsioni tjetër - përdorimi i qmake
- është gjithashtu i disponueshëm dhe është më i lehtë për t'u punuar, por për projektin tim cmake
është i detyrueshëm).
Fjalët kyçe këtu janë të përpilimit të ndërthurur dhe vendosjes në distancë.
Marrja e zinxhirit të veglave për përpilimin e kryqëzuar - kryesisht i dobishëm për arm-linux-gnueabihf-g++, i cili kërkohet për përpilimin e kryqëzuar (nuk dua të përdor CodeSourcery g++). Artikulli thotë se armhf është për RPi2 dhe kjo është arsyeja pse zgjodha këtë përpilues në veçanti
Konfiguro Pjesën 1 të Krijuesit Qt - Shtimi i një pajisjeje Linux, një çantë zhvillimi dhe përpiluesi - në thelb këtu ju tregoni Qt Creator platformën tuaj të synuar, e cila në këtë rast është një RPi2 konsiderohet të jetë një pajisje e përgjithshme Linux dhe duke shtuar përpiluesin ARM plus gjenerimin e një komplete zhvillimi, të cilin e quajta RPi2 Kit :
-
- The build configuration is adding the newly created kit (see 2)):
Konfirmimi që projekti do të ndërtohet duke përdorur Kit RPi2:
Konfigurimi i vendosjes thjesht shton një QtCreatorDeployment.txt në dosjen rrënjë të projektit CMake:
sftp://192.168.1.102/ build/RPiCrossCompileRemoteTest:home/pi/Projects
Rreshti i parë përfaqëson prefiksin e vendosjes dhe rreshti i dytë përshkruan shtegun përkatës lokal (në fletoren time) të skedarit të ekzekutueshëm (në të majtë) dhe shtegun relative të largët (në RPi2 tim). Dokumentacioni i Qt Creator shton gjithashtu një hap për automatizimin e këtij procesi brenda CMakeLists.txt, por si përpjekje e parë mendoj se është më mirë ta bësh me dorë. Gjithashtu ju mund të shtoni shtigje të shumta nëse keni nevojë (gjë që unë nuk e bëj në rastin tim pasi nuk mund të funksionoj një shteg të vetëm -_-).
Hapat shtesë përfshijnë ndryshimin e disa gjërave në seksionin e vendosjes së projektit (që gjenden në konfigurimin Run) - kontrollimi i hapësirës së lirë (vendosa ta bëj këtë në rast se filloj të ndërtoj aplikacione të mëdha dhe hapësira mbaron më shpejt, atëherë e menaxhoj për të mbajtur gjurmët :3), ngarkoni skedarët përmes SFTP dhe më në fund shtova ekzekutimin e një komande të personalizuar në distancë, e cila thjesht shkruan në një skedar teksti (në RPi2 tim!) një mesazh budalla si regjistër:
- Konfigurimi i ekzekutimit të projektit duhet të ketë qenë gjithashtu i lehtë. E vetmja gjë që ndryshova ishte vendosja e drejtorisë së punës të projektit tim në vendndodhjen e largët në RPi2 tim:
Më në fund këtu është kodi që përdor:
#include <fstream>
#include <string>
#include <iostream>
int main()
{
std::cout << "Writing to remote system...";
try
{
std::string input = "This is a cross-compilation and remote deployment test for Raspberry Pi using Qt Creator";
std::ofstream out("remote_log.txt");
out << input;
out.close();
}
catch(std::exception e)
{
std::cout << "Failed" << std::endl;
return 1;
}
std::cout << "Successful" << std::endl;
return 0;
}
së bashku me CMakeLists.txt:
project(RPiCrossCompileRemoteTest)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
Në rregull? GABIM! Këtu e kam problem të kuptoj se çfarë më mungon ose çfarë po bëj gabim - kur ndërtoj projektin tim, binarët e prodhuar janë për arkitekturën e fletores sime. Këtu është dalja e komandës file RPiCrossCompileRemoteTest
:
RPiCrossCompileRemoteTest: ELF 64-bit LSB executable, x86-64, version 1
(SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for
GNU/Linux 2.6.32, BuildID[sha1]=73a819def72e496aab31127add9fb52df2ac2c47,
not stripped
Po, e thotë me zë të lartë dhe qartë - x86-64. Vendosja nuk shkakton ndonjë gabim (lidhja SSH e suksesshme dhe skedarët tekst të shkruar në RPi2 pa ndonjë problem) dhe as ekzekutimi i binareve (nëpërmjet Krijuesit Qt ose terminalit) në fletoren time. Megjithatë, një gjë tjetër që kam vënë re është se për disa arsye SFTP nuk po ngarkon binarin tim. Po, binar është me arkitekturë të pasaktë dhe unë nuk do të jem në gjendje ta ekzekutoj atë në RPi2 tim, por prapëseprapë duhet të ngarkohet apo jo?
Kam kontrolluar gjithashtu nëse për ndonjë arsye kam zgjedhur përpiluesin e gabuar duke përpiluar manualisht kryesoren time dhe duke prodhuar një binar:
:~$ arm-linux-gnueabihf-g++ main.cpp -o RPiCrossCompileRemoteTest_Manual
Mora një binar të bukur ARM, të cilin munda ta kopjoj dhe ta ekzekutoj në RPi2 tim. Më është shfaqur gjithashtu konfirmim shtesë nga dalja e file RPiCrossCompileRemoteTest_Manual
:
RPiCrossCompileRemoteTest_Manual: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV),
dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux
2.6.32, BuildID[sha1]=8aca4ed570c44a51a820c6aa56e6257129e0c949, not stripped
Nuk e kam idenë se çfarë po bëj gabim. Kam ndjesinë se jam shumë, shumë afër që kjo gjë të funksionojë, por mjerisht! përpjekjet e mia për disa orë ishin të kota.
Ndihma vlerësohet shumë!
PS: Vini re se nuk e kam konfiguruar korrigjuesin tim. Kjo është diçka që planifikoj të bëj më pas pasi të fus në punë bazat dhe të lexoj më shumë rreth korrigjimit në distancë.
cmake
në projektin tuaj (punon gjithashtu nga brenda Qt Creator) ju duhet të kaloni-DCMAKE_TOOLCHAIN_FILE=<toolchain-file>.cmake
. Brenda atij skedari mund të vendosni sistemin e skedarëve rrënjë, versionin e ndërthurur të Qt (nëse keni një të tillë), flamujt e ndërthurjes, cilësimet e mjedisit, cilësimet e lidhjes etj. Megjithatë kjo nuk ka të bëjë fare meQtCreatorDeployment.txt
dhe është magji e pastërcmake
. 06.11.2017-D...
po i kalon një vlerë një ndryshoreje cmake (qoftë ajo e personalizuar apo ajo që ofron vetë cmake). Kështu që ju mund ta përcaktoni atë brendaCMakeLists.txt
tuaj ose ta kaloni atë përmes magjistarit cmake (ose sido që të quhet) kur të ekzekutoni cmake në projektin tuaj nga brenda Qt Creator. Sigurisht nëse shtoni vlerën e skedarit të zinxhirit të veglave brendaCMakeLists.txt
tuaj dhe nuk e kaloni atë si argument në komandën cmake, ai do të merret parasysh sa herë që ekzekutoni cmake. Kjo nuk është e dobishme nëse së pari kodoni dhe ekzekutoni aplikacionin tuaj në sistemin tuaj të devijimit dhe më pas e kompiloni atë. 10.11.2017