Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
RPi cross-compile C/C++ za MacOS (x86 -> ARM)
#1
Pozdrav svima,

kao sto komplikovani naslov govori radi se o komplikovanoj materiji i nadam se da ce neki iskusan programer da se ukljuci u problematiku.

Sve bi to bilo super i sto je najgore radi na Linuxu, ali meni treba za MacOS i tu nastaje problem sto nema oficialnih toolset-ova za tu platformu i svi kazu da se koristi Clang (koji je sam po sebi crooscompiler) sto donekle nije strasno i mozda proradi sa njim ali ne mogu da ga nateram da povuce sve sto treba jer MORA da se bilduje i linkuje na osnovu postojecih biblioteka i kernela od RPi (skine se sa RPi u lokal na case-sensitive FS) ali stalno nesto kuka da mu fali.

Intereseuje me samo ovo cudo da proradi, dakle najprostiji HelloWorld.cpp ali da se bilduje na macOS (x86) a da radi na RPi ARM Linux, nista vise ne trazim, samo to Smile 

PHP Code:
#include <iostream>

int main() {
 
 std::cout << "Hello world" << std::endl;
 
 return 0;

Reply
#2
Nisam kompententan za ovaj problem ali u zelji da pomognem naletih na ovo :
https://www.jaredwolff.com/blog/cross-co...pberry-pi/
https://www.jaredwolff.com/toolchains/
Reply
#3
Nemam pojma vise nista .... pogubio sam se skroz a kako i nebi ... : (

ovo je komanda za prevodjenje i to kao radi

Code:
"/Volumes/xtool-build-env/raspbian-sdk/prebuilt/clang+llvm-7.0.0-x86_64-apple-darwin/bin/clang-7" -cc1 -triple armv6kz--linux-gnueabihf -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name hello.cpp -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -fuse-init-array -target-cpu arm1176jzf-s -target-feature +strict-align -target-abi aapcs-linux -mfloat-abi hard -fallow-half-arguments-and-returns -dwarf-column-info -debugger-tuning=gdb -target-linker-version 409.12 -v -resource-dir /Volumes/xtool-build-env/raspbian-sdk/prebuilt/clang+llvm-7.0.0-x86_64-apple-darwin/lib/clang/7.0.0 -isysroot /Volumes/xtool-build-env/raspbian-sdk/sysroot -I /Volumes/xtool-build-env/sysroot/usr/include -I /Volumes/xtool-build-env/sysroot/usr/include/arm-linux-gnueabihf/ -internal-isystem /usr/local/include -internal-isystem /Volumes/xtool-build-env/raspbian-sdk/prebuilt/clang+llvm-7.0.0-x86_64-apple-darwin/lib/clang/7.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir /Volumes/xtool-build-env -ferror-limit 19 -fmessage-length 214 -fno-signed-char -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/5q/httk5zk11yl6hfhrf5rdhbrh0000gn/T/hello-36b108.o -x c++ hello.cpp -faddrsig

a ovo za linkovanje koja ne radi i tu je haos ...

Code:
"/Volumes/xtool-build-env/host/bin/arm-linux-gnueabihf-ld" --sysroot=/Volumes/xtool-build-env/sysroot -X --eh-frame-hdr -m armelf_linux_eabi -dynamic-linker /lib/ld-linux-armhf.so.3 -o a.out /Volumes/xtool-build-env/sysroot/usr/lib/arm-linux-gnueabihf/crt1.o /Volumes/xtool-build-env/sysroot/usr/lib/arm-linux-gnueabihf/crti.o /Volumes/xtool-build-env/sysroot/usr/lib/gcc/arm-linux-gnueabihf/6/crtbegin.o -L/Volumes/xtool-build-env/sysroot/usr/lib/gcc/arm-linux-gnueabihf/6 -L/Volumes/xtool-build-env/sysroot/usr/lib/gcc/arm-linux-gnueabihf/6.3.0 -L/Volumes/xtool-build-env/sysroot/usr/lib/gcc/arm-linux-gnueabihf/6.3.0/../../../../lib -L/Volumes/xtool-build-env/sysroot/lib/../lib -L/Volumes/xtool-build-env/sysroot/usr/lib/../lib -L/Volumes/xtool-build-env/sysroot/usr/lib/arm-linux-gnueabihf/../../lib -L/Volumes/xtool-build-env/sysroot/usr/lib/gcc/arm-linux-gnueabihf/6.3.0/../../.. -L/Volumes/xtool-build-env/sysroot/lib -L/Volumes/xtool-build-env/sysroot/usr/lib /var/folders/5q/httk5zk11yl6hfhrf5rdhbrh0000gn/T/hello-36b108.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /Volumes/xtool-build-env/sysroot/usr/lib/gcc/arm-linux-gnueabihf/6/crtend.o crtn.o -L/Volumes/xtool-build-env/sysroot/usr/lib/arm-linux-gnueabihf/ /Volumes/xtool-build-env/sysroot/usr/lib/arm-linux-gnueabihf/crt1.o

ma bezi ovo je bolesno ....
Reply
#4
Jel moze da se pokrene program kompajliran sa Cygwinom na Windowsu, na MacOS?
Reply
#5
Pa moze ali to je isti problem kao i kod mene, da bi to preveo i linkovao moras da imas kod sebe kopiju celeog Mac-ovog /usr/lib i /usr/local/lib pa onda includove jer on mora da prevede/linkuje "od kulina bana" sve redom, libc++ pa redom ...

Problem kod mene sto su putanje zabrljane, ne mogu to sve da skockam na gomilu i da se povuce tacno sto treba, mesaju mi se toolsetovi, nesto povuce iz /usr/local (odatle nista ne sme da vuce za croos-compile) a nesto pak povuce iz direktorijuma koju sam mu specificirao da mi je toolchain.
Reply
#6
Dobrodošao u klub Sad
Juče sam se "drndao" sa ARM GCC na Linux/Windows...
Nažalost, ne mogu ti konkretno pomoći, ali pitanje je za tebe: da nije možda lakše da instaliraš neku virtelnu mašinu (Virtual Box) i pod njim Linux pa tako?
Reply
#7
Ako ti nesto pomaze, imam gcc 4.7 koji radi na Windowsu sa Cygwinom, a kompajlira za ARM.
Reply
#8
@npejcic To mi radi, VMware pod MacOS sa Linuxom unutra i toolchain za RPi, ludnica ali radi ...
A to radi zato sto se toolchain podmetne kao default i kada kazes g++ ili ld on skonta “aha za ARM prevodim” i onda povuce sta treba i mislim da onda “zabrlja” ostalo pa ne mozes tu da prevodis za x86 linux osim ako nemas neki tool za “switchovanje” kao sto radi sponenuti croostool-ng ...
Reply
#9
Za Android ARM ima jedna bas takva skripta koja exportuje na gomilu tools-ove i biblioteke za target koji izaberes, posebno se uradi za x86 i poebno za ARM i kada se prevodi sve se lepo povuce odatle a na meni je samo da navedem -L i -I do tog foldera prilikom prevodjenja. To radi lepo na svim OS, aliii ja sam na RPi linuxu ne Android linux ... dodje mi da predjem na Android ...
Reply
#10
Ja sam probao i za beaglebone i rpi, linux i win i ništa mi nije radilo. Odlepio sam i batalio. Jeste glupo ali to malo što sam radio sa rpi, radio sam direktno na njemu. Možda probam ponovo, prošlo je dovoljno vremena. Nije ti baš neka pomoć.. jbg
Reply
#11
Hehe, svako ko je pokusao da uradi cross-compile za RPi je odlepio na kraju ... : )
Reply
#12
Meni radi  Tongue Na Linuxu, Linaro ima kompajlirane kompajlere koji vec gledaju svoje putanje u okviru instalacije, samo treba da se pozove odgovarajuci izvrsni fajl iz instalacije ili da se doda u PATH. Slicnih stvari ima i ovde, Ubuntu i Debian imaju u repozitorijumima gcc-arm-linux-gnueabihf, i to radi bez problema za BeagleBone, za NanoPi 32 i 64-bitni uglavnom, pa sto ne bi i za RPi
Reply
#13
E ako ti proradilo, proradilo i meni. Tongue

Lepo covek napisao tamo "Before we start anything I recently compiled the toolchain for Rpi3. It will save you a whole bunch of time to download it here rather than go through this proceedure."
https://www.jaredwolff.com/toolchains/

Code:
/Volumes/xtools/armv8-rpi3-linux-gnueabihf/bin/armv8-rpi3-linux-gnueabihf-c++ test.c -o app -O3 -s

ls -la app
-rwxr-xr-x  1 miki  staff  3776 Oct  7 22:23 app

file app 
app: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 4.3.0, stripped

I radi na RPi .... e to je vec napredak Smile
Reply
#14
BTW: tamo spominju da se ide na ARM-ov sajt i skine toolchain:
https://developer.arm.com/open-source/gn.../downloads

Medjutim sa njim se opet u isti problem dolazi jer mora da mu se specificira opet sve ovo gore sto sam ja pokusavao i za koji target, i da li ima/nema linux itd.

Toolchain koji sam skinuo sa https://www.jaredwolff.com/toolchains/ je to isto samo sto mu je u izvrsne fajlove (gcc, g++, ld i ostalo) ustvari hardcodovana sva podesavanja tacno za RPi Linux ARM.
Crosstool-ng sluzi da se ti alati tako prevedu i konfigurisu, ali kada sam nasao vec to gotovo ne zalazim tamo dalje ... Smile
Reply
#15
Rekoh ti ja. Cool
Reply
#16
Vidim da ste se snašli Smile
Hvala @enaB, i ja sam se snašao u međuvremenu, postavio sam ovaj kompajler:
https://developer.arm.com/open-source/gn...ain/gnu-rm

Zatim instalirao ovo:
http://www.mingw.org/

I zanimljivo, meni neočekivao, kada sam uradio "make", kompajler mi je privaljivao grešku za koju sam kasnije shvatio da je inicirana time što nisam kreiro "build" folder u okviru projekta. Nekako sam sledio loguku da će kompajler sve što treba od foldera da kreira... mada kada bolje razmislim, a što bi to on radio Smile
Reply
#17
Treba to malo istestirati, povezati par nekih bibliotekica (npr Boost) i onda probati recimo -O3 flag (maximalna optimizacija) ... Kod mene tako cross-preveden program na RPI onda kaze cuveno "Segmentation Fault", bez toga radi!!! Probajte ...
Na RPi kada se prevede isti taj program sa -O3 nemam nikakvih problema, tako daaaaa, nije to sve bas idealno kao sto izgleda .... Ako pocne prevodilac tako da zeza onda od ta posla nema nista, pa ozbiljno ...
Reply
#18
Sta bi se tek desilo da sam hteo Buildroot da pokrenem Big Grin
https://buildroot.org

Mislim da pre ovoga treba da proverim da li ima slobodnog mesta u ustanovi "Male Pcelice" posto je tamo guzva velika, ceka se mesto .... Big Grin
Reply
#19
Korisni linkovi za cross-compile na *nix za ARM procesore:

Demystifying ARM Floating Point Compiler Options
https://embeddedartistry.com/blog/2017/1...r-options/

Objasnjenje i praktican primer
https://freckled.dev/how-to/2019/07/29/c...scompiler/

Ovo je bitno takodje:
 
arm-none-eabi - This tool chain targets for ARM architecture, has no vendor, does NOT target an operating system and complies with the ARM EABI. 

arm-none-linux-gnueabi - This toolchain targets the ARM architecture, has no vendor, creates binaries that run on the Linux operating system, and uses the GNU EABI.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)