我正在使用Cygwin。我在同一目录中有两个文件,test.c和iah202_graphics.h。 test.c使用头文件中的函数,我在其中使用了#include“iah202_graphics.h”。我已经将Cygwin目录添加到我的环境变量(PATH)中。
但是我收到每个函数调用的这些错误:
$ gcc -o test test.c
/cygdrive/c/Users/Matthew/AppData/Local/Temp/cclm2bNk.o:test.c:(.text+0x27): undefined reference to `draw_line'.
/cygdrive/c/Users/Matthew/AppData/Local/Temp/cclm2bNk.o:test.c:(.text+0x27): relocation truncated to fit:
R_X86_64_PC32 against undefined symbol `draw_line'.
/cygdrive/c/Users/Matthew/AppData/Local/Temp/cclm2bNk.o:test.c:(.text+0x4a): undefined reference to
`draw_line'.
collect2: error: ld returned 1 exit status.
即使我只是声明在本地目录中使用哪个文件,它也无法链接到头文件。我不明白我做错了什么?
Undefined reference to 'blah'
是链接器错误而不是编译器错误,并且几乎总是由于不包括所需的库而导致。
在源文件中包含头文件通常不会链接到提供该头中声明的函数所需的代码中。
例如,如果您要阻止C运行时库的链接,您可以根据需要多次包含stdio.h
,但仍然无法解析printf
。
最重要的是,您通常需要两个步骤:
这可能是一件简单的事情:
gcc -o test -I/path/to/iah202includes test.c -L/path/to/iah202libs -liah202
其中-I
表示可以找到包含文件的位置,-L
调整库文件的搜索路径,-l
实际指定要使用的库文件。
更简单的是,如果你有图形内容的源文件(根据你的评论似乎是这种情况)。在这种情况下,不需要库,您可以简单地使用:
gcc -o test test.c iab202_graphics.c
然后编译这些翻译单元然后将它们链接在一起。