Ich habe versucht, eine statische Bibliothek (kompiliert mit gcc) mit einem C++-Programm zu verknüpfen, und ich habe ‘undefinierte Referenz’ erhalten. Ich habe gcc und g ++ Version 4.6.3 auf einem Ubuntu 12.04-Servercomputer verwendet. Hier ist zum Beispiel die einfache Bibliotheksdatei für die faktorielle Methode:
mylib.h
#ifndef __MYLIB_H_
#define __MYLIB_H_
int factorial(int n);
#endif
mylib.c
#include "mylib.h"
int factorial(int n)
{
return ((n>=1)?(n*factorial(n-1)):1);
}
Ich habe ein Objekt für diese mylib.c mit gcc erstellt:
gcc -o mylib.o -c mylib.c
Auch hier wurde die statische Bibliothek mit dem AR-Dienstprogramm aus der Objektdatei erstellt:
ar -cvq libfact.a mylib.o
Ich habe diese Bibliothek mit einem C-Programm (test.c) und einem C++-Programm (test.cpp) getestet.
Sowohl C- als auch C++-Programme haben denselben Rumpf:
#include "mylib.h"
int main()
{
int fact = factorial(5);
return 0;
}
Unter der Annahme, dass die statische Bibliothek libfact.a im Verzeichnis /home/test verfügbar ist, habe ich mein C-Programm ohne Probleme kompiliert:
gcc test.c -L/home/test -lfact
Beim Testen des C++-Programms wurde jedoch ein Link-Fehler ausgegeben:
g++ test.cpp -L/home/test -lfact
test.cpp:(.text+0x2f): undefined reference to `factorial(int)'
collect2: ld returned 1 exit status
Ich habe sogar versucht, den externen Befehl in test.cpp hinzuzufügen:
extern int factorial(int n) //added just before the main () function
Immer noch der gleiche Fehler.
- Kann mir jemand sagen was ich hier falsch mache?
- Gibt es etwas, das ich beim Erstellen der statischen Bibliothek übersehen habe?
- Muss ich irgendetwas in meiner hinzufügen
test.cpp
damit es funktioniert?
Wenn ich SO-Fragen ohne Upvote sehe, zusammen mit einer 7-Upvote-Antwort, verstehe ich voll und ganz, wie dumm die Menschheit ist. Wie kann die Antwort relevant sein, wenn die Frage es nicht ist? Komm schon!
– m-ric
4. Juni 2014 um 19:01 Uhr