首页 > 解决方案 > 尽管链接正确,但未定义的引用

问题描述

我正在尝试编译以下测试程序:

#include <SDL2/SDL.h>

int main(int argc, char** argv)
{
    SDL_Window* window = SDL_CreateWindow("test", 0, 0, 640, 480, 0);
    SDL_DestroyWindow(window);
}

我首先在命令行上编译,我正在使用以下命令(稍后我将添加警告选项):

gcc test.c -lmingw32 -lSDL2main -lSDL2

编译此程序后,我收到以下未定义的参考错误:

c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\JACOBD~1\AppData\Local\Temp\cceuyYlI.o:test.c:(.text+0x36): undefined reference to `SDL_CreateWindow'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\JACOBD~1\AppData\Local\Temp\cceuyYlI.o:test.c:(.text+0x44): undefined reference to `SDL_DestroyWindow'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../libmingw32.a(main.o):(.text.startup+0xc0): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

如上述错误所示,我目前正在使用来自http://www.mingw.org/的 gcc 9.2.0 。在我的另一台开发机器上,我使用来自https://jmeubank.github.io/tdm-gcc/的 TDM-GCC 5.1.0 版,该测试程序在其他 SDL2 程序中可以正确编译。

我检查了我用 nm 链接的库,发现以下内容有点令人担忧:

nm: effect_position.o: file format not recognized
nm: effect_stereoreverse.o: file format not recognized
nm: effects_internal.o: file format not recognized
nm: load_aiff.o: file format not recognized
nm: load_voc.o: file format not recognized
...
nm: native_midi_win32.o: file format not recognized

我不清楚问题是什么。从我所见,我已将所有库和包含在正确的位置。

标签: clinkersdl-2

解决方案


推荐阅读