未定义的'_method'参考

时间:2012-04-02 18:05:23

标签: c compiler-errors

我相信我的编译器选项会发生一些非常奇怪的事情。当我编译class.c时,它编译没有错误。但是,当我尝试创建.dll时,我会遇到很多错误:

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

举一个例子,其中一个未定义的引用是undefined refence to '_min_size'class.c中,它看起来像:

if(min_size){ dsize=min_size; }

min_size中的class.c之前没有下划线。我确定这与我的编译/链接语法有关但我只是看不到它。任何帮助表示赞赏!谢谢!

PS:我正在使用Netbeans和Cygwin。

2 个答案:

答案 0 :(得分:0)

_只是Windows上stdcall调用约定所需的前缀,编译器会添加。

如果你有extern size_t min_size; ,你只宣布了min_size。即你告诉编译器,某处会有size_t min_size;定义。你必须在某处实际定义该变量(例如在你的class.c中,把size_t min_size放在那里。)

答案 1 :(得分: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

更改编译器选项后,我不再有任何关于未定义引用的错误!我希望将来可以帮助一些人。 :)