Avatar billede coolpool Nybegynder
10. februar 2011 - 12:09 Der er 5 kommentarer og
1 løsning

Sætte ARM compiler op på 10.10

Hej,

Jeg er begyndt at arbejde med Linux i skolen og jeg skal anvende en bestemt ARM compiler (CodeSourcery 2007 G++) til at kompilere C++ kode til et target. Opgaven går ud på at jeg skal kunne skrive "arm-none-eabi-g++ -o hello hello.cpp" i terminalen for at kompilere et Hello World program (altså ligesom man gør med g++, bare med en anden kompiler).
Jeg har downloaded CodeSourcery Compileren og installeret den, men hvordan får jeg lavet det så jeg kan skrive det som beskrevet ovenfor?

Skal jeg lave et alias, eller hvordan skal jeg gøre det? I så fald, hvordan laver jeg så aliaset så det opfører sig rigtigt?

Håber der er nogen, der kan hjælpe ;)
Avatar billede HBP2 Praktikant
10. februar 2011 - 12:24 #1
Nu kender jeg godt nok ikke noget til den compiler, men det har vel ikke så meget med compileren at gøre - det er vist mere et generel spørgsmål.

Kan du compile med en anden kommando? F.eks.:

./codesourcery/g++ -o hello hello.cpp

(eller hvad stien til den installerede compiler nu end er...)

Hvis du kan det, så kan du bare lave et link til den egentlige compiler og kalde linket "arm-none-eabi-g++". Pænere end aliaser, synes jeg.
Avatar billede coolpool Nybegynder
10. februar 2011 - 15:09 #2
Jeg kan ikke rigtig finde ud af, hvorfor det går galt, men jeg får følgende fejl når jeg prøver at kompilere med arm-none-eabi-g++:

~/CodeSourcery/Sourcery_G++_Lite/bin$ ./arm-none-eabi-g++ -o hello hello.cpp
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/bin/ld: warning: cannot find entry symbol _start; defaulting to 00008018
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-abort.o): In function `abort':
abort.c:(.text+0xc): undefined reference to `_exit'
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-fstatr.o): In function `_fstat_r':
fstatr.c:(.text+0x1c): undefined reference to `_fstat'
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-makebuf.o): In function `__smakebuf':
makebuf.c:(.text+0xf8): undefined reference to `isatty'
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-openr.o): In function `_open_r':
openr.c:(.text+0x20): undefined reference to `_open'
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
sbrkr.c:(.text+0x18): undefined reference to `_sbrk'
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-signalr.o): In function `_getpid_r':
signalr.c:(.text+0x4): undefined reference to `_getpid'
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-signalr.o): In function `_kill_r':
signalr.c:(.text+0x2c): undefined reference to `_kill'
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-sysfstat.o): In function `fstat':
sysfstat.c:(.text+0x4): undefined reference to `_fstat'
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-syslseek.o): In function `lseek':
syslseek.c:(.text+0x4): undefined reference to `_lseek'
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-sysread.o): In function `read':
sysread.c:(.text+0x4): undefined reference to `_read'
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-syswrite.o): In function `write':
syswrite.c:(.text+0x4): undefined reference to `_write'
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-writer.o): In function `_write_r':
writer.c:(.text+0x20): undefined reference to `_write'
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-closer.o): In function `_close_r':
closer.c:(.text+0x18): undefined reference to `_close'
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-lseekr.o): In function `_lseek_r':
lseekr.c:(.text+0x20): undefined reference to `_lseek'
/home/thomas/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-readr.o): In function `_read_r':
readr.c:(.text+0x20): undefined reference to `_read'
collect2: ld returned 1 exit status

Har du noget forslag til, hvad jeg gør forkert? :) Jeg kan godt køre den med -c i stedet for -o. Det giver i hvert fald ingen fejl, men når jeg skal lave object-filerne giver den mig fejlene ovenfor.
Avatar billede HBP2 Praktikant
10. februar 2011 - 15:18 #3
Lyder mest af alt som om du mangler at linke med et low-level bibliotek af en slags. Google "undefined reference to `_fstat'"
giver f.eks. dette:
  http://www.codesourcery.com/archives/arm-gnu/msg01835.html
som foreslår at du tilføjer
  -T generic.ld
når du compiler.
Avatar billede coolpool Nybegynder
10. februar 2011 - 15:45 #4
Ah! Der var jo en løsning. Jeg skulle bare have "-T generic-hosted.ld" på i enden ;)

Nu skal jeg bare have lavet et link eller et alias (jeg er ikke sikker på jeg forstår forskellen). Jeg skal på en eller anden måde have lavet det, så uanset hvilken mappe jeg står i kan tilgå compileren med en nem genvej.

Hvad skal jeg søge efter, for at finde en løsning? :)

Tak for hjælpen!
Avatar billede HBP2 Praktikant
10. februar 2011 - 15:59 #5
Et link er noget som håndteres af filsystemet: fil A peger på B, så når du bruger file A så er det i virkeligheden filen B som bruges.

Et alias håndteres af shell'en (bash) og har ikke så meget med filer at gøre, som med kommandoer.

Det nemmeste er måske at tilføje  codesourcery kataloget til din sti. I din .profile eller .bash_profile eller .bashrc fil skal du bare tilføje:

PATH="/path/to/codesourcery:$PATH"

Næste gang du logger ind (åbner en terminal) så bliver PATH sat til at inkludere stien til codesourcery.
Avatar billede coolpool Nybegynder
10. februar 2011 - 16:01 #6
Tak! ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester