"Undefined reference" an eine Funktion definiert, die in der statischen Bibliothek

Ich versuche, erstellen Sie eine Bibliothek in einer Anwendung zu verwenden. Ich baute die Bibliothek als unten, und wenn ich die Anwendung kompilieren, bekomme ich die folgende Fehlermeldung:

Ich habe das getan beolw Dinge.

Benutze ich:

gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 

In der Bibliothek aus aufgerufen werden Anwendung:

Hier ich habe eine Menge Module, aber Einstiegspunkt für diese Bibliothek ist func()
(d.h., main () wird ersetzt mit func (), so dass ich das Modul aufrufen, auch func () ist nicht deklariert als 'static'.)

In einer der Dateien:

int func ();
...

int func () 
{ ... } 

Dann baute die Bibliothek als:

gcc -Wall file.c -o file.o
...
...

ar rvs libfun.a $(OBJS)

Auch verwendet ranlib-und nm -s auf libfun.ein separat zu bauen, symbol, Tisch,
aber die Gesamtgröße der archive ändert sich nicht, nach der Verwendung dieser Befehle und ist immer noch das linking-Fehler.
Hier $(OBJS) enthält alle Objekt-Dateien

In Anwendung:

extern int func ();

Kompilieren mit:

gcc -Wall -L./path-to-lib  -lfun  -o appl

Dann bekomme ich die folgende Fehlermeldung:

In function `main':
undefined reference to `func()'
collect2: ld returned 1 exit status

Habe ich versucht zu bauen Symboltabelle mit "ar s" und "ranlib" aber das Ergebnis ist dasselbe.

Eine Sache, die ich beobachtet habe ist, dass es einen Unterschied im Inhalt von "ar", die ich gebaut und die Archive bereits im Projekt für andere Module.

Archiv gebaut von mir enthält (Ausgang mit "nm -s libfun.ein" ):

Archive index:
Cfg1 in f1.o
mCfg1 in f1.o
dpCfg in f1.o

Aber die anderen Archive die ich benutze, ohne irgendwelche änderungen enthalten, die unter seltsamen Muster:

Archive index:
_Z29platformSetjP38tagTCPIP_INTERFACE_INSTANCE_ATTRIBUTES in platform.o
_Z27platformTestSetTcpjP20tagTCPIP_CONFIG_DATAPh in platform.o
_Z23platformSetTcpIpjP20tagTCPIP_CONFIG_DATA in platform.o

Ich bin nicht sicher, was ist der Unterschied oben. Ist es eine shared-Library, oder eine Statische Bibliothek ?

Ich versuche zu kompilieren mit GCC und build-Archiv mit 'ar', sondern die andere Bibliothek-Dateien kann mit g++ - compiler. Ich bin mir nicht sicher. Nur für den Fall ist es wichtig.

Was mache ich hier falsch in dem Bau meiner Bibliothek ? Bitte helfen?

Grüße.

  • gcc -Wall -L./path-to-lib -lfun -o appl es gibt keine source - /Objekt-Datei, die hier erwähnt, so dass ich vermute, es ist am Ende angehängt. Die Bibliothek, in Verbindung mit, wahrscheinlich muss gehen, nach der Quelle, so bewegen -lfun an das Ende der Befehlszeile.
  • Ja, ich habe OBJS enthält alle kompilierten Quellen der Anwendung beim kompilieren der definitiven Anwendung. Ich versuchte, verschieben Sie die Bibliotheken ($(LIBS) alles rund um die Befehlszeile, aber es hat nicht geholfen. ich benutze cross-compiler für ARM-embedded-Prozessoren. ** $(CROSS_COMPILE)gcc-Wall -o appl $(OBJS) -L./Pfad-zu-lib -lfun **
InformationsquelleAutor Ashoka K | 2012-12-13
Schreibe einen Kommentar