Da ist noch etwas nicht richtig, ich kann Dir aber jetzt auf die Schnelle nicht sagen, was: Deine Funktion landet eben nicht in der (__TEXT,__text) Section. Damit ist auch erklärt, warum der Linker sie nicht finden kann.
Assembler ist jetzt bei mir schon lange her, da müsste ich jetzt noch mal tiefer buddeln. Hilfreiche Werkzeuge hier sind aber nm und otool -t -v
Gruss
Alex
Ergebnis 1 bis 10 von 12
- 29.12.2011, 00:48 #1Jonagold
Themenstarter
- Registriert
- 07.2009
- Beiträge
- 23
gcc undefined symbols
Abend,
nachdem ich mir jetzt auf dem mac soweit alles an Entwicklungs- und Testumgebung eingerichtet habe wollte ich ein erstes Projekt compilieren, gcc war damit anscheinend nicht ganz so einverstanden. Es ist nur ein einfaches Testprojekt bestehend aus einer einer C Datei
test.c:
code.S:Code:#include <stdio.h> extern int method(int n); int main(void) { printf(method(2)); return 0; }
Das man global durch globl ersetzen muss hab ich bereits rausgefunden, allerdings will mir gcc das ganze so nicht linkenCode:.section.text, .globl method method: ...
gcc -m32 -o prog code.S test.c
gibt mir den Fehler
Undefined symbols for architecture i386:
"_method", referenced from:
_main in ccfrOLS9.o
ld: symbol(s) not found for architecture i386
Am Code liegt es definitiv nicht da das ganze auf einer Linux Maschine das gewünschte Ergebnis gebracht hat. Hat mir jemand einen Tipp wo das Problem liegt? Die Forensuche und google haben hier leider nicht viel weitergeholfen weil bei den ganzen Problemen jeweils eine Bibliothek oder ähnliches gefehlt hat was hier ja nicht der Fall ist, sonst würde der Code auf einer anderen Architektur nicht problemlos laufen.
- 29.12.2011, 10:48 #2Dir gefällt die neue Apfeltalk-Registrierung? Dann setz mich bitte auf Deine Ignorier-Liste
- 29.12.2011, 12:23 #3
Also, richtig sollte sein:
AlexCode:.text .globl _method _method: ...
Dir gefällt die neue Apfeltalk-Registrierung? Dann setz mich bitte auf Deine Ignorier-Liste
- 29.12.2011, 13:42 #4Jonagold
Themenstarter
- Registriert
- 07.2009
- Beiträge
- 23
Vielen dank schonmal, so gehts jetzt auch auf dem Mac. Momemtan hab ich nur noch 2 Probleme: 1. ".extern xyz" mag er nicht und 2. ".int xyz" auch nicht. Wieder lief beides auf einer anderen Maschine schon. Weiß jemand zufällig welche Befehle der OSX linker da sehen möchte?
- 29.12.2011, 14:12 #5
Wichtig: Wenn Du ein neueres OS X benutzt, dann ist gcc hier gar kein gcc, sondern llvm mit gcc Frontend (mach mal: ls -l `which gcc`) . Der soll natürlich angeblich 100% kompatibel sein zu gcc, ob das aber auch für Assembly gilt, kann ich Dir nicht sagen.
Ich denke mal es lohnt sich für Dich, Dir da mal die llvm Dokumentation anzusehen.
HTH
AlexDir gefällt die neue Apfeltalk-Registrierung? Dann setz mich bitte auf Deine Ignorier-Liste
- 29.12.2011, 14:21 #6Jonagold
Themenstarter
- Registriert
- 07.2009
- Beiträge
- 23
danke das wusste ich nicht, ich dachte wenn das ding gcc heist wirds auch das passende sein aber anscheinend nicht, zumindest hier ist er nicht 100% kompatibel. Dann werde ich wohl mal die Dokumentation lesen müssen, sehr seltsam
- 29.12.2011, 14:23 #7
Apple hat sich von gcc verabschiedet, der neue König heisst llvm. Das gcc Frontend ist nur als "Übergangshilfe" gedacht.
AlexDir gefällt die neue Apfeltalk-Registrierung? Dann setz mich bitte auf Deine Ignorier-Liste
- 29.12.2011, 14:53 #8Jonagold
Themenstarter
- Registriert
- 07.2009
- Beiträge
- 23
na toll, dann schau ich besser mal wo ich einen richtigen gcc herbekomme
- 29.12.2011, 14:55 #9
Älteres OS X, oder Macports. Besser und zukunftssicherer: Code auf llvm, as oder nasm anpassen.
Gruss
AlexDir gefällt die neue Apfeltalk-Registrierung? Dann setz mich bitte auf Deine Ignorier-Liste
- 29.12.2011, 14:55 #10


Zitieren


