2017-02-03 4 views
0

Ich versuche, eine statische Bibliothek mit MinGW zu erstellen.Nicht definierte Funktion von der statischen Bibliothek

Alles ging gut, bis ich die Bibliothek zu benutzen versucht und bekam eine Fehlermeldung, dass add_numbers ist eine nicht definierte Funktion.

Viele andere Leute haben dieses Problem gehabt und es aussortiert, indem sie ihre Bibliothek verschoben haben, nachdem die Quelldateien eingeschlossen wurden, aber so hatte ich meine Batchdatei sowieso geschrieben, so dass das nicht viel half.

Hier sind meine Quellen.

mylib.h

#ifndef MYLIB_H 
#define MYLIB_H 
int add_numbers(int a, int b, int c); 
#endif 

mylib.c #include "mylib.h" int add_numbers (int a, b int, int c) { return a + b + c; }

Ich bin mit den folgenden Befehlen meine .a-Datei Aufbau

gcc --std = c89 -c mylib.c -o mylib.o

ar rcs libmylib.a mylib.o

ich habe auch versucht, mit aus dem Standard festlegen. Es gibt keine Fehler oder Warnungen, wenn dieser Befehl ausgeführt wird.

Als nächstes mein Testprogramm sieht wie folgt aus.

#include <stdio.h> 
#include "mylib.h" 
int main() 
{ 
printf("The sum of 1, 2, and 3 is %d", add_numbers(1, 2, 3)); 
getchar(); 
return 0; 
} 

Und schließlich bauen wir den Test mit diesem Befehl. gcc mylibtest.c -L -lmylib -o test.exe

Ich habe um diese Befehle in viele verschiedene Sequenzen versucht, zu bewegen, aber immer den folgenden Fehler empfangen:

C: \ Benutzer \ Aaron \ AppData \ Local \ Temp \ cc0ERpBi.o. mylibtest.c :(text + 0x26): undefined Bezug auf `add_numbers' collect2.exe: Fehler: ld returned 1 exit status

E: \ my_first_static_library>

Jede Hilfe wäre sehr willkommen, ich habe jedes Tutorial gelesen, das ich finden konnte die Kunst, statische Bibliotheken zu schreiben, sowie eine gute zehn Stackoverflow-Fragen.

+0

yugr Ihre Antwort hat. Sie haben '-L' statt' -L.', so dass der der Linker stellt fest, dass das Argument der '-L' ist' -lmylib', dh '-lmylib' ist der Name eines Verzeichnisses, das Sie den Linker wollen für die Suche nach Bibliotheken und folglich * findet * nicht, dass Sie tatsächlich Bibliotheken verknüpfen. Daher undefined Verweis auf Ihre Bibliotheksfunktion. –

Antwort

1

Sie vermissen einen Punkt nach -L:

gcc mylibtest.c -L . -lmylib -o test.exe 
Verwandte Themen