将MinGW的.a静态C库与GoLink链接

3

我正在尝试使用NASM和GoLink制作一个SDL2程序,只是为了好玩,但我无法将SDL2main.a和SDL2链接到我的可执行文件中。我的架构是win64。

我的main.asm


[bits 64]

extern ExitProcess

extern SDL_Init
extern SDL_Quit


SDL_INIT_VIDEO equ 0x00000020

section .text

    _start:
        mov rcx, SDL_INIT_VIDEO
        call SDL_Init

        call SDL_Quit

        xor rcx, rcx
        call ExitProcess

这是我构建.exe文件的方式:

nasm -f win64 main.asm -o main.obj
.\GoLink.exe /console /entry _start /fo prog.exe main.obj kernel32.dll

我遇到了以下错误:

GoLink.Exe Version 1.0.4.1  Copyright Jeremy Gordon 2002-2022   info@goprog.com

Error!
The following symbols were not defined in the object file or files:-
SDL_Init
SDL_Quit
Output file not made

如果可以的话,我的静态库位于./lib文件夹中。


如果您想使用静态库,我很好奇为什么您有 .a 文件而不是 .lib 文件。您从哪里获取您的SDL2? - Michael Petch
啊,我刚才没看到注释功能。我使用MinGW版本,因为通常在Windows下使用gcc编写C/C++代码,我将尝试Visual C/C++版本。而且我不使用ld,因为在Windows上使用它很麻烦。 - Ayrton
MinGW的GCC/G++在编译可执行文件时使用LD作为其链接器(在幕后)。即使您没有使用任何.C文件,GCC也可以用于链接目的。 - Michael Petch
1
我知道,但是使用nasm时会出现很多错误,所以使用GoLink更容易。而且它也能正常工作,谢谢! - Ayrton
1个回答

4

GoLink 不支持 MinGW 工具链创建的 .a 静态库文件格式。如果您想使用 GoLink,您需要获取一个与 Microsoft 工具和链接器兼容的 SDL2 库的副本。

在您的情况下,您需要下载适用于 Visual C++ 的 SDL2 开发库,可以在他们的下载页面上找到,而不是您目前正在使用的 MinGW 库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接