[gelöst] [C/C++] Probleme beim Linken

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Accelerometer
Beiträge: 168
Registriert: 31.01.2009 17:03:13
Lizenz eigener Beiträge: GNU Free Documentation License

[gelöst] [C/C++] Probleme beim Linken

Beitrag von Accelerometer » 28.02.2009 11:12:33

Hallo!

Ich habe hier seit gestern Sourcen zu einer neuen Bibliothek und leider noch etwas Probleme damit. Das kompilieren der Bibliothek selbst funktioniert einwandfrei nur beim linken von Programmen zur Bibliothek erhalte ich jede Menge Referenzen die nicht aufgelöst werden können.

Schematisch:
* die Header liegen in /opt/libcustom/include
* die Bibliothek selbst heisst libcustom.a und liegt in /opt/libcustom/lib und ist laut file ein "current ar archive".

Das erzeugen von Objektcode mit

Code: Alles auswählen

g++ -D__DEFINE__ -c -I/opt/libcustom/include testprogramm.cc
funktioniert einwandfrei und erzeugt Objektcode. Beim linken mit

Code: Alles auswählen

g++ -D__DEFINE__ -L/opt/libcustom/lib -lcustom testprogramm.o
erhalte ich jedoch jede Menge unaufgelöster Referenzen auf in der Bibliothek enthaltene Methoden.

Jemand eine Idee was das schiefläuft?
Zuletzt geändert von Accelerometer am 28.02.2009 21:12:32, insgesamt 1-mal geändert.
"Ich bin ein Gegner der Religion. Sie lehrt uns, damit zufrieden zu sein, dass wir die Welt nicht verstehen."
-- Richard Dawkins, "Der Gotteswahn"

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: [C/C++] Probleme beim Linken

Beitrag von gms » 28.02.2009 20:59:24

Accelerometer hat geschrieben:

Code: Alles auswählen

g++ -D__DEFINE__ -L/opt/libcustom/lib -lcustom testprogramm.o
erhalte ich jedoch jede Menge unaufgelöster Referenzen auf in der Bibliothek enthaltene Methoden.

Jemand eine Idee was das schiefläuft?
die Reihenfolge machts aus:

Code: Alles auswählen

gms@gms1 ~ $ echo "int myfunc(){return 2;}" >x.c
gms@gms1 ~ $ gcc -o x.o -c x.c
gms@gms1 ~ $ ar cru libx.a x.o
gms@gms1 ~ $ ranlib libx.a
gms@gms1 ~ $ echo -e "int myfunc(); int main() { return myfunc();}" >y.c

gms@gms1 ~ $ # so gehts nicht:
gms@gms1 ~ $ gcc -o y -L. -lx y.c
/tmp/ccU013eP.o: In function `main':
y.c:(.text+0xa): undefined reference to `myfunc'
collect2: ld gab 1 als Ende-Status zurück

gms@gms1 ~ $ # so gehts:
gms@gms1 ~ $ gcc -o y y.c -L. -lx
gms@gms1 ~ $ ./y
gms@gms1 ~ $ echo $?
2
In y.c wird ''myfunc' referenziert, daher muß "myfunc" in y.c oder weiter rechts definiert werden

Gruß
gms

Benutzeravatar
Accelerometer
Beiträge: 168
Registriert: 31.01.2009 17:03:13
Lizenz eigener Beiträge: GNU Free Documentation License

Re: [C/C++] Probleme beim Linken

Beitrag von Accelerometer » 28.02.2009 21:12:03

gms hat geschrieben: die Reihenfolge machts aus:
(...)
In y.c wird ''myfunc' referenziert, daher muß "myfunc" in y.c oder weiter rechts definiert werden
Ich hatte eigentlich gedacht, dass ich diese Variante auch ausprobiert habe. Und ich denke, das habe ich auch; nur wahrscheinlich nicht genau genug hingeschaut: es treten dann auch Linker-Fehler auf, allerdings andere die ich jetzt durch das Angeben der entsprechenden Bibliotheken verhindern konnte.

Es funktioniert jetzt also :)

Danke!
"Ich bin ein Gegner der Religion. Sie lehrt uns, damit zufrieden zu sein, dass wir die Welt nicht verstehen."
-- Richard Dawkins, "Der Gotteswahn"

Antworten