【问题标题】:Problems installing packages which use SDL2 via cgo on Windows 7在 Windows 7 上通过 cgo 安装使用 SDL2 的软件包时出现问题
【发布时间】:2018-04-24 13:58:20
【问题描述】:

我在使用 Visual Studio Code 为 golang 安装 SDL2 时遇到问题。

我试着拿到包裹:

"C:\Users\Bob\go\src\flappyGopher>go get -v github.com/veandco/go-sdl2/sdl
github.com/veandco/go-sdl2/sdl
# github.com/veandco/go-sdl2/sdl
In file included from ..\github.com\veandco\go-sdl2\sdl\audio.go:4:0:
./sdl_wrapper.h:2:23: fatal error: SDL2/SDL.h: No such file or directory
compilation terminated."

我用过这本手册:https://github.com/vinzBad/go-sdl2-tut/blob/master/00_preparation/windows.md

我也有环境变量:

CGO_CFLAGS C:\MinGW64\mingw64\include
GOPATH C:\Users\Bob\go
GOROOT C:\Go\
PATH ... C:\MinGW64\mingw64\x86_64-w64-mingw32\bin;C:\MinGW64\mingw64\bin;C:\Users\Bob\Downloads\SDL2-2.0.8\x86_64-w64-mingw32\include\SDL2

编辑:gcc 输出看起来一团糟

C:\Users\Bob>gcc -xc -E -v -
Using built-in specs.
COLLECT_GCC=gcc
Target: x86_64-w64-mingw32
Configured with: ../../../src/gcc-5.1.0/configure --build=x86_64-w64-  mingw32 --e
nable-targets=all --enable-languages=ada,c,c++,fortran,lto,objc,obj-c++ --enable
-libgomp --enable-lto --enable-graphite --enable-cxx-flags=-DWINPTHREAD_STATIC -
-disable-build-with-cxx --disable-build-poststage1-with-cxx --enable-libstdcxx-d
ebug --enable-threads=posix --enable-version-specific-runtime-libs --enable-full
y-dynamic-string --enable-libstdcxx-threads --enable-libstdcxx-time --with-gnu-l
d --disable-werror --disable-nls --disable-win32-registry --prefix=/mingw64tdm -
-with-local-prefix=/mingw64tdm --with-pkgversion=tdm64-1 --with-bugurl=http://td
m-gcc.tdragon.net/bugs
Thread model: posix
gcc version 5.1.0 (tdm64-1)
COLLECT_GCC_OPTIONS='-E' '-v' '-mtune=generic' '-march=x86-64'
 C:/Program Files/TDM-GCC-64/bin/../libexec/gcc/x86_64-w64-mingw32/5.1.0/cc1.exe
 -E -quiet -v -iprefix C:/Program Files/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-min
gw32/5.1.0/ -D_REENTRANT - -mtune=generic -march=x86-64
ignoring duplicate directory "C:/Program Files/TDM-GCC-64/lib/gcc/../../lib/gcc/
x86_64-w64-mingw32/5.1.0/include"
ignoring duplicate directory "C:/Program Files/TDM-GCC-64/lib/gcc/../../lib/gcc/
x86_64-w64-mingw32/5.1.0/../../../../include"
ignoring duplicate directory "C:/Program Files/TDM-GCC-64/lib/gcc/../../lib/gcc/
x86_64-w64-mingw32/5.1.0/include-fixed"
ignoring duplicate directory "C:/Program Files/TDM-GCC-64/lib/gcc/../../lib/gcc/
x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/include"
#include "..." search starts here:
#include <...> search starts here:
 C:/Program Files/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/include
 C:/Program Files/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../..
/include
 C:/Program Files/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/include-fixed
  C:/Program Files/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../..
/x86_64-w64-mingw32/include
End of search list.

【问题讨论】:

  • 在windows命令提示符下,需要设置`CGO_FLAGS=-IC:\Users\Bob\Downloads\SDL2-2.0.8\x86_64-w64-mingw32\include`,然后执行去拿...
  • 我试过了,还是一样的错误信息 C:\Users\Bob>set CGO_FLAGS=-IC:\Users\Bob\Downloads\SDL2-2.0.8\x86_64-w64-mingw3 2\include C:\Users\Bob>go get -v github.com/veandco/go-sdl2/sdl github.com/veandco/go-sdl2/sdl # github.com/veandco/go-sdl2/sdl 文件中包含在 go\src\github.com\veandco\go-sdl2\sdl\audio.go:4:0: ./sdl_wrapper.h:2:23: 致命错误:SDL2/SDL.h: 没有这样的文件或目录编译终止。

标签: go installation windows-7-x64 cgo


【解决方案1】:

请参阅this

原因是go install试图编译一些 cgo github.com\veandco\go-sdl2 包的代码,并且该代码显然 想用C header files libsdl2 库¹。

你需要libsdl2 可供编译器使用。

找出 C 编译器期望在哪里找到包含(头文件) 文件,请参阅this


¹这就是 C 的工作原理。要在其他 C 代码中使用已编译的库,编译器 通常需要知道所提供的类型和函数的定义 通过那个图书馆。此类库的格式(与 Go 库相反)通常不会在其元数据中嵌入类型信息,因此编译器 需要从某个地方获取该信息。在 C 和 C++ 世界中,此信息通常保存在所谓的包含(也:头文件)文件中 通过使用所谓的预处理器将它们都包含在 用于构建库的代码和使用该库的代码。

【讨论】:

  • 我必须知道 C 是如何工作的才能使用 Go 吗?我将在第一篇文章中更新 gcc 输出
猜你喜欢
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 2022-07-25
  • 1970-01-01
相关资源
最近更新 更多