go - 在 Windows 7 上通过 cgo 安装使用 SDL2 的软件包时出现问题
问题描述
我在使用 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.
解决方案
请看这个。
原因是go install
试图编译包的一些
cgo
代码github.com\veandco\go-sdl2
,而该代码显然想要使用库的
C头文件libsdl2
¹。
您需要使libsdl2
编译器可用。
要确定 C 编译器期望在哪里找到包含(头)文件,请参阅此.
¹这就是 C 的工作方式。要在其他 C 代码中使用已编译的库,编译器通常需要知道该库提供的类型和函数的定义。与 Go 库相反,此类库的格式通常不会将类型信息嵌入其元数据中,因此编译器需要从某个地方获取该信息。在 C 和 C++ 世界中,这些信息通常保存在所谓的包含(也:头文件)文件中,这些文件通过使用所谓的预处理器被包含在用于构建库的代码和使用的代码中图书馆。
推荐阅读
- javascript - 测试特定的数字序列是否在整数javascript中
- python - 如何在另一个矩阵中间插入一个矩阵
- r - R中是否有一个函数可以在时间记录中断之前读取最后30秒的时间?
- drools - 用于drools业务中心工作台的Nginx反向代理
- firebase - 如何从 Firebase 实时数据库中获取数据并使用 Flutter 将其放入列表中?
- webpack - 我在 Webpack 中收到 .css 模块解析失败错误,即使我已经在 module.rules 中有一个 css-loader
- python - Pandas Groupby 除了列并取该列的第一个值
- python - 有没有办法恢复 anaconda3 包含文件?
- python - Python Selenium:如何返回给定 URL 的所有 XPath 列表
- html - HTML:如何使用页面中文本的内部链接?