未指定cgo SDL函数

未指定cgo SDL函数,go,sdl,cgo,Go,Sdl,Cgo,我试着到处找这个,试着尽我所能,我不能让SDL在围棋中工作。这是我的代码,有点草率,但我只是想让它工作,只是为了测试它,只是作为一个起点。我打算以后把它清理干净,去掉所有不必要的东西 package main // #cgo LDFLAGS: -lSDL -lSDL_main -lSDL_image // #include <stdio.h> // #include <SDL/SDL.h> // #include <SDL/SDL_main.h> // #i

我试着到处找这个,试着尽我所能,我不能让SDL在围棋中工作。这是我的代码,有点草率,但我只是想让它工作,只是为了测试它,只是作为一个起点。我打算以后把它清理干净,去掉所有不必要的东西

package main

// #cgo LDFLAGS: -lSDL -lSDL_main -lSDL_image
// #include <stdio.h>
// #include <SDL/SDL.h>
// #include <SDL/SDL_main.h>
// #include <SDL/SDL_image.h>
import "C"

import "runtime"

func init() {
runtime.LockOSThread()
}

func main() {
var image* C.SDL_Surface
var screen* C.SDL_Surface
C.SDL_Init( C.SDL_INIT_EVERYTHING )
screen = C.SDL_SetVideoMode(640, 480, 32, C.SDL_SWSURFACE)
hello = C.SDL_LoadBMP( "moe.bmp" )
C.SDL_BlitSurface(hello, nil, screen, nil)
C.SDL_Flip(screen)
C.SDL_Delay(2000)
C.SDL_FreeSurface(hello)
C.SDL_Quit()
}
主程序包
//#cgo LDFLAGS:-lSDL-lSDL_主-lSDL_映像
//#包括
//#包括
//#包括
//#包括
输入“C”
导入“运行时”
func init(){
runtime.LockOSThread()
}
func main(){
var图像*C.SDL\U曲面
可变屏幕*C.SDL\U表面
C.SDL_Init(C.SDL_Init_一切)
屏幕=C.SDL_设置视频模式(640480 32,C.SDL_表面)
hello=C.SDL\u LoadBMP(“moe.bmp”)
C.SDL_BlitSurface(你好,无,屏幕,无)
C.SDL_翻转(屏幕)
C.SDL_延迟(2000年)
C.SDL_自由曲面(您好)
C.SDL_Quit()
}
这给了我一个“命令行参数”错误:“SDL_LoadBMP”未声明(此函数首次使用),再多的搜索或向导也无法修复它。如果需要的话,我在Ubuntu上使用SDL1.0.2(我想)

我宁愿不使用包装器,因为Go唯一的SDL1包装器已经使用了两年,两个好的包装器是SDL2,我宁愿使用SDL1。谢谢任何能指导我的人


另外,还有一个额外的问题,因为编译器永远不会让我测试它(很明显),我是否在BlitSurface的参数中使用“nil”、“NULL”或“C.NULL”(我知道我必须定义这些参数)?

在回到C之前,您是否尝试过在go中使用本机SDL库?此外,如果这不起作用,您可以用c编写或使用其他类型的库(如OpenGL或Ogre3D)进行图形处理,这两种库很久以前就支持go了


编辑:您确定围棋是适合您所做游戏/图形工作类型的语言吗?java或C++之类的东西在行业中更为常见,而且有更好的支持。Go不经常用于游戏,这是因为许多不同的API缺乏官方库。

我恐怕不得不同意Prakesh的观点,尽管他措辞有点粗鲁。 Go对于大型图形应用程序来说还不够成熟,我假设您使用SDL,您已经是一个独立的游戏开发人员,希望尝试Go的新形式,或者是一个现有的Go程序员,在开发游戏时选择了糟糕的语言(尝试C++或Haskell,学习多语言没有害处!!) 当然,你可能对编程和游戏开发都是新手,在这种情况下,我建议尝试游戏制作或遵循C++教程。
至于第二个问题,您可以使用Go的“nil”,因为据我所知,它仍然表示“\0”的ASCII字符。

SDL\u LoadBMP是一个宏,而不是一个函数。它的定义是

#define SDL_LoadBMP(file)   SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1)

但是,Cgo将无法使用宏,因此您有两种选择:要么使用宏的扩展版本,要么编写一个使用宏的C函数,然后从Go调用该函数。

对不起,我不是要支持sass,但我问如何在Go中解决此问题,我不能用其他语言来代替围棋。如果你不懂一门语言,我建议你不要回答问题,这对任何人都没有帮助。