Golang安装go-sdl2时出现"Fatal Error: SDL2/SDL.h文件不存在"问题

Golang安装go-sdl2时出现"Fatal Error: SDL2/SDL.h文件不存在"问题 大家好,

我正在尝试为Go安装“SDL-GO”包。我通过这个关于如何在Windows上安装SDL的教程成功安装了SDL本身:

Games With Go EP 06 - SDL2 Setup

但不幸的是,我仍然无法通过 go get github.com/veandco/go-sdl2/sdl 安装SDL2-GO,我总是收到这个错误信息:

In file included from go\pkg\mod\github.com\veandco\go-sdl2@v.0.4.10\sdl\audio.go:4:./sdl_wrapper.h:2:11: fatal error: SDL2/SDL.h No such file or directory
2 | #include <SDL2/SDL.h>
                    ^~~~~~~~~~~
compilation terminated.

我在网上能找到的关于这个错误的唯一线索是,我应该尝试安装32位版本的Go。但我想问问大家,我是否遗漏了其他东西?如果可能的话,我想在Windows上使用64位版本。我对Go相当陌生,所以很可能我遗漏了一些相当明显的东西^^。

感谢你们的帮助。

祝好,


更多关于Golang安装go-sdl2时出现"Fatal Error: SDL2/SDL.h文件不存在"问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang安装go-sdl2时出现"Fatal Error: SDL2/SDL.h文件不存在"问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这个问题是因为Go编译器在编译go-sdl2时找不到SDL2的头文件。你需要确保SDL2的开发库已正确安装且路径配置正确。

解决方案:

  1. 确认SDL2开发库安装

    • SDL官网下载SDL2开发库(SDL2-devel-2.x.x-mingw.tar.gz或SDL2-devel-2.x.x-VC.zip)
    • 解压后,将includelib目录复制到你的系统路径中,例如C:\SDL2
  2. 设置环境变量

    • 添加SDL2_INCLUDE_PATH指向SDL头文件目录(例如C:\SDL2\include
    • 添加SDL2_LIB_PATH指向SDL库目录(例如C:\SDL2\lib\x64
    • 将SDL2的DLL文件(如SDL2.dll)复制到你的Go项目目录或系统PATH包含的目录中
  3. 使用pkg-config(推荐)

    • 安装pkg-config for Windows
    • 创建sdl2.pc文件:
      prefix=C:/SDL2
      exec_prefix=${prefix}
      libdir=${exec_prefix}/lib/x64
      includedir=${prefix}/include
      
      Name: sdl2
      Description: Simple DirectMedia Layer
      Version: 2.0.x
      Libs: -L${libdir} -lSDL2
      Cflags: -I${includedir}/SDL2
      
    • 设置PKG_CONFIG_PATH环境变量指向该文件所在目录
  4. 或者直接修改Go编译命令

    set CGO_CFLAGS=-IC:/SDL2/include
    set CGO_LDFLAGS=-LC:/SDL2/lib/x64 -lSDL2
    go get github.com/veandco/go-sdl2/sdl
    

验证安装

package main

import "github.com/veandco/go-sdl2/sdl"

func main() {
    if err := sdl.Init(sdl.INIT_EVERYTHING); err != nil {
        panic(err)
    }
    defer sdl.Quit()
    
    window, err := sdl.CreateWindow("test", sdl.WINDOWPOS_UNDEFINED, 
        sdl.WINDOWPOS_UNDEFINED, 800, 600, sdl.WINDOW_SHOWN)
    if err != nil {
        panic(err)
    }
    defer window.Destroy()
    
    sdl.Delay(2000)
}

如果问题仍然存在,检查你的GCC/MinGW版本是否与SDL2库兼容。

回到顶部