2012-04-02 14 views
0

Ich glaube, dass mit meinen Compiler-Optionen etwas sehr Seltsames passiert. Wenn ich class.c kompiliere kompiliert es ohne Fehler. Allerdings, wenn ich versuchen, die .dll ich viele Fehler bekommen zu erstellen:Undefined Referenz zu '_method'

undefined reference to '_method' 

_method eine beliebige Anzahl von Methoden in class.c ist

ich meinen Code mit dem folgenden kompilieren:

gcc -c -g -w -I/path to include dir/include -MMD -MP -MF .../class.o.d -o class.o class.c 

Meine Link-Syntax ist wie folgt:

gcc -Wl,--add-stdcall-alias -m32 -shared -o dist/libdt.dll class.o 

Um eine ex reichlich, einer der undefinierten Referenzen ist undefined refence to '_min_size' In class.c aber es sieht aus wie:

if(min_size){ dsize=min_size; } 

Es gibt keinen Strich vor den min_size in class.c. Ich bin mir sicher, dass das etwas mit meiner Kompilier-/Link-Syntax zu tun hat, aber ich sehe es einfach nicht. Jede Hilfe wird geschätzt! Vielen Dank!

PS: Ich benutze Netbeans und Cygwin.

+1

Wie und wo hast du min_size definiert? –

+0

Sorry, das ist raus. In einer enthaltenen Datei: class.h. Es ist vom Typ size_t – redhotspike

+0

Aber undefinierte Referenzen haben nichts mit Include/Header-Dateien zu tun. –

Antwort

0

Das _ ist nur ein Präfix, das die Aufrufkonvention für Windows von stdcall erfordert, die der Compiler hinzufügt.

Wenn Sie extern haben size_t min_size; , Sie haben nur die min_size deklariert. Sie haben dem Compiler gesagt, dass irgendwo ein size_t min_size; definiert. Sie müssen tatsächlich irgendwo diese Variable definieren (zum Beispiel in Ihrem class.c, setzen size_t MIN_SIZE; da.)

+0

* schmatzt Stirn * lol ich bin wirklich rostig mit C [email protected] Danke. Du hast es geschafft. Es gab keine Definition von min_size in class.c. Gute Trauer ... – redhotspike

0

Update: ich durch meine Compiler-Optionen wieder ging, weil noch etwas war mir über die Optionen nervt I zur Verfügung gestellt. Ich habe es herausgefunden: in meiner class.h Datei hatte ich einige #if defined(__STRICT_ANSI__) und #if defined(__WIN32__) Anweisungen: Ich habe nie definiert, dass diese gesetzt wurden.

Für meine Compiler-Optionen zukünftige Referenz ich jetzt anbieten sind:

gcc -ansi -Wall -Waggregate-return -Wcast-align -Wimplicit -Wmissing-prototypes -Wnested-externs -Wno-parentheses -DFIFO -D__Win32__ -D_NT_SOURCE -c -o class.o class.c 

Nachdem die Compiler-Optionen zu ändern, ich nicht mehr über undefinierte Referenzen Fehler bekommen! Ich hoffe, das hilft einigen Menschen in der Zukunft. :)