• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

gcc undefined symbols

nightmarevs

Alkmene
Registriert
09.07.09
Beiträge
33
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:
#include <stdio.h> 
extern int method(int n);
 
int main(void)
{    
    printf(method(2));
    return 0;
}

code.S:
Code:
[COLOR=#991664].section.text[COLOR=#000000],[/COLOR][/COLOR]

[COLOR=#991664].globl[/COLOR] method
[COLOR=#991664]method:
...[/COLOR]

Das man global durch globl ersetzen muss hab ich bereits rausgefunden, allerdings will mir gcc das ganze so nicht linken

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.
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
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
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Also, richtig sollte sein:
Code:
[COLOR=#991664].text[/COLOR]

[COLOR=#991664].globl[/COLOR] _method
[COLOR=#991664]_method:
...[/COLOR]

Alex
 

nightmarevs

Alkmene
Registriert
09.07.09
Beiträge
33
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?
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
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

Alex
 

nightmarevs

Alkmene
Registriert
09.07.09
Beiträge
33
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
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Apple hat sich von gcc verabschiedet, der neue König heisst llvm. Das gcc Frontend ist nur als "Übergangshilfe" gedacht.

Alex
 

nightmarevs

Alkmene
Registriert
09.07.09
Beiträge
33
na toll, dann schau ich besser mal wo ich einen richtigen gcc herbekomme
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Älteres OS X, oder Macports. Besser und zukunftssicherer: Code auf llvm, as oder nasm anpassen.

Gruss

Alex
 

Pii

Rheinischer Krummstiel
Registriert
25.06.07
Beiträge
383
Bei Xcode 3.2.6 ist der gcc dabei.
 

nightmarevs

Alkmene
Registriert
09.07.09
Beiträge
33
ich würde den Code gerne auf llvm anpassen nur fehlt mir momentan die Zeit die ganzen eigenheiten einzeln rauszusuchen. Gibt es vllt. eine Liste mit unterschieden zu gcc? Google wollte mir leider nicht helfen den passenden ersatz für .extern und .int zu finden