2012-04-02 19 views
0

我相信我的編譯器選項非常奇怪。當我編譯class.c它編譯沒有錯誤。然而,當我嘗試創建.dll我得到很多的錯誤:未定義對'_method'的引用

undefined reference to '_method' 

_method是任意數量的class.c方法

我編譯我的代碼如下:

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

我的鏈接語法如下:

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

給一個ex充足的,未定義的參考之一是undefined refence to '_min_size'class.c,但是,它看起來像:

if(min_size){ dsize=min_size; } 

有一個在class.cmin_size前沒有下劃線。我確信這與我的編譯/鏈接語法有關,但我只是沒有看到它。任何幫助表示讚賞!謝謝! PS:我使用的是Netbeans和Cygwin。

+1

你是怎麼定義min_size的? – 2012-04-02 18:07:24

+0

對不起,離開了。在一個包含的文件中:class.h。它的類型是size_t – redhotspike 2012-04-02 18:10:35

+0

但是未定義的引用與include /頭文件無關。 – 2012-04-02 18:10:55

回答

0

_僅僅是窗口上stdcall調用約定所需的前綴,即編譯器添加的。

如果你有extern size_t min_size; ,你只宣佈了min_size。即你已經告訴編譯器某處會有size_t min_size;定義。你有實際的地方定義變量(例如在您class.c,把爲size_t MIN_SIZE;在那裏。)

+0

*打了額頭* lol我真的生鏽了C 。@nos謝謝。你已經釘住了它。 class.c中沒有min_size的定義。好悲傷... – redhotspike 2012-04-02 18:45:09

0

更新:我通過我的編譯器選項又去因爲事情還在纏着我,我提供的選項。我想通了:在我的class.h文件中,我有一些#if defined(__STRICT_ANSI__)#if defined(__WIN32__)陳述:我從來沒有定義那些被設置。

以供將來參考我的編譯器選項,我現在提供有:

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 

更改編譯器選項之後,我不再有大約未定義的引用任何錯誤!我希望這可以幫助一些人在未來。 :)