Compilație încrucișată sub braț - comandant de miezul nopții, card personal, tetraquark

Compilație încrucișată sub braț - comandant de miezul nopții, card personal, tetraquark

Tema încrucișării este, fără îndoială, importantă. În procesul de lucru pe diferite proiecte, este foarte posibil să existe o necesitate de a compila programul pentru diferite arhitecturi fără acces direct la dispozitive cu arhitectura necesară. Cel mai obișnuit exemplu este să compilați managerul de fișiere pentru mașina Mașină Pi, dar faceți-o direct pe "plăcintă" a întreprinderii, ceea ce implică petrecerea mult timp în așteptare (fără a lua în considerare diferitele probleme și erori care, cred eu).

Prin urmare, voi dedica câteva înscrieri pe această temă, deoarece în mine au apărut recent probleme similare, cu care încă am reușit să fac față. Și aș vrea să împărtășesc experiența cu publicul.

De fapt, ce sarcină, ce date inițiale, ce înseamnă. Sarcina este de a compila managerul cunoscut de fișiere Midnight Commander (mc) pentru un sistem cu arhitectura ARM. În mâinile noastre, un computer cu un procesor Intel, cu sistemul de operare Ubuntu 14.04. Ca și compilator, vom folosi pachetul gcc-4.7-arm-linux-gnueabi, care se află perfect în depozite. Materialul sursă este codurile sursă ale bibliotecilor necesare și codul mc în sine.

În primul rând, să începem cu o instalare simplă a instrumentelor pentru compilarea încrucișată. Totul se întâmplă foarte simplu:

# apt-get instalați gcc-4.7-arm-linux-gnueabi
# apt-get instalați gcc-arm-linux-gnueabi
Acest caz funcționează ca gcc, puteți apela compilatorul astfel: arm-linux-gnueabi-gcc. Toate caracteristicile pe care le puteți vedea aici: om arm-linux-gnueabi-gcc.

Pasul 2 - descărcați sursele. Sunt necesare următoarele surse:

Pasul 3 - pregătiți pentru compilarea încrucișată. Acum trebuie să pregătim codul sursă descărcat pentru compilare. Dar mai întâi o nuanță - nu am reușit să compilez mc cu căi relative. Cine nu știe, problema este următoarea: atunci când compilam anumite biblioteci, trebuie să specificăm căile spre bibliotecile dependente deja compilate. De fapt, atunci când compilați mc în sine, trebuie să-l hrăniți cu cele de mai sus. Specificând căile complete (și scripturile de configurare dintr-un anumit motiv necesită să specificați căi absolute), mc va fi rulat numai pe căile sistemului de fișiere în care totul a fost compilat. De exemplu, dacă vă decideți să colecteze toate aici: / home / username / arm_mc, apoi programul pe un alt calculator va începe imediat ce în / home / username / arm_mc, cu condiția ca toate bibliotecile dependente sunt de asemenea situate în acele locuri care sunt indicate cu o cruce -kompilyatsii. Aceasta este o problemă pe care nu am reușit să o rezolv, voi fi foarte recunoscător dacă cineva va spune cum să procedeze corect.

Prin urmare, în cazul nostru vom folosi cea mai simplă opțiune: toate compilarii va fi aici / tmp / mc_build / construiește, și a alerga totul va fi bine prin modul (dacă vă decideți să faceți acest lucru, nu uitați să facilitate tmp - după o repornire a sistemului, directorul curat ).

Prin urmare, facem următoarele:

Directorul / tmp / mc_build / sursele noastre pune mc_src.tar.gz arhiva și de a efectua decompresie în conținutul directorului de toate arhivele mâini sau așa (înainte de a efectua primul du-te cu directorul arhivei):

$ tar -xf mc_src.tar.gz pentru f în * .tar *; face tar xf $ f; făcut

Pasul 4 - compilarea. Procesul de compilare este într-adevăr foarte simplu pentru noi, de fapt, dezvoltatorii au avut grijă pentru a crea un script și să-fișiere de configurare, care realizează ele însele toate treburile murdare. Dreptul nostru este necesar doar pentru a furniza dependențele necesare și script-uri necesare pentru a alimenta steagurile și parametrii. Cum vom face acest lucru: va fi necesar pentru a crea un executabil bash-script în directorul rădăcină al bibliotecii compilate, să se înregistreze în acest script comenzile și să execute script-ul. De fapt, vom aborda acest proces, destul de rutină. Pentru prima bibliotecă mă înscriu pentru secvența completă de comenzi pentru restul voi cita doar textele bash-script.

Creați un fișier de script la rădăcină:

Copiați următorul text în acest fișier:

CHECK_LIBS = "-L / tmp / mc_build / construiește / build_check-0.10.0 / lib / -lcheck" \

GLIB_CFLAGS = "-I / tmp / mc_build / construiește / build_glib-2.44.1 / include / curgător-2.0 -I / tmp / mc_build / construiește / build_glib-2.44.1 / lib / curgător-2.0 / include" \

GLIB_LIBS = "-L / tmp / mc_build / construiește / build_glib-2.44.1 / lib -lglib-2.0" \

GMODULE_CFLAGS = "-I / tmp / mc_build / construiește / build_glib-2.44.1 / include / curgător-2.0 -I / tmp / mc_build / construiește / build_glib-2.44.1 / lib / curgător-2.0 / include" \

GMODULE_LIBS = "-L / tmp / mc_build / builds / build_glib-2.44.1 / lib / glib-2.0 -lgmodule-2.0" \

-- gazdă = arm - linux - gnueabi \

-- prefixul = / tmp / mc_build / builds / build_mc - 4.8.14 \

-- activa - static = da \

-- cu - screen = ncurses \

-- cu - ncurses - include = "/tmp/mc_build/builds/build_ncurses-5.9/include" \

-- cu - ncurses - libs = "/tmp/mc_build/builds/build_ncurses-5.9/lib"

sudo face instalare

Dacă ai făcut după toate cele de mai sus nu a fost tati /tmp/mc_build/builds/build_mc-4.8.14 - Felicitări, ați reușit, probabil, cross-compilare Midnight Commander manager de fișiere pentru arhitectura ARM.

Etapele următoare sunt simple - incarca un director / tmp / mc_build / se bazează pe sistemul dorit pe aceeași cale de nume și a alerga mc: /tmp/mc_build/builds/build_mc-4.8.14/bin/mc. Totul ar trebui să funcționeze.

Compilație încrucișată sub braț - comandant de miezul nopții, card personal, tetraquark

Pentru cunoscători, în acest exemplu, biblioteca ncurses a fost folosită ca bibliotecă grafică, deoarece este mai simplă în ceea ce privește asamblarea. Există o opțiune de a utiliza biblioteca de slang (pentru această versiune versiunea 2.3.0), dar aceasta este o sarcină mai complexă, deoarece slang-ul are mai multe dependențe. Puteți încerca, nu am reușit până acum.

Toate mulțumirile, puneți-vă un husky, abonați-vă la canalul meu, la revedere!

Cross-compilație sub ARM - OpenSSH

22 de gânduri despre "Compilația încrucișată sub ARM - comandantul de la miezul nopții"

Și mai mult. Probleme cu probleme - nu compilați atunci nu pot găsi anteturi, atunci libs. M-am compilat fără ea. Cu toate acestea. Nu compilează fără bibliotecile de slang. Trebuie să-l colectăm.

Sugak Victor spune:

Alo Spuneți nou-venirii. Cum determinați ce altceva trebuie să compilați pentru programul de care aveți nevoie. Ei bine, de ce mai are nevoie de cinci surse?

Sugak Victor spune:

Mulțumesc.
Și ce înseamnă aceste trei linii
#! / bin / bash
ARCH = arm \
CC = arm-linux-gnueabi-gcc.
De ce nu puteți intra doar

$ arm-linux-gnueabi-gcc (numele fișierului sursă) -o (numele fișierului executabil)

Îmi pare rău pentru întrebările prostești, nu mai trebuia să mă ocup de linux

Sugak Victor spune: