【问题标题】:cgo SDL function not specified未指定 cgo SDL 函数
【发布时间】:2013-08-14 18:07:47
【问题描述】:

我已尝试在任何地方查找此内容并尝试了几乎所有我能做的事情,但我无法让 SDL 在 Go 中工作。这是我的代码,有点草率,但我只是想让它工作,只是为了测试它,只是作为一个起点。我打算稍后清理它并删除所有不必要的#defines。

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()
}

这给了我“命令行参数”错误:'SDL_LoadBMP' 未声明(在此函数中首次使用),再多的搜索或魔法也无法解决它。如果需要,我在 Ubuntu 上使用 SDL 1.0.2(我认为)

我宁愿不使用包装器,因为用于 Go 的唯一 SDL 1 包装器已经使用了两年,而两个好的包装器用于 SDL 2,我宁愿使用 SDL 1。谢谢任何可以指导我的人。

另外,还有一个额外的问题,因为编译器永远不会让我测试它(显然),我是否使用“nil”、“NULL”或“C.NULL”(我知道我必须#define) BlitSurface 的论点?

【问题讨论】:

    标签: go sdl cgo


    【解决方案1】:

    SDL_LoadBMP 是一个宏,而不是一个函数。它的定义是

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

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

    【讨论】:

      【解决方案2】:

      恐怕我不得不同意 Prakesh 的观点,尽管他的措辞有点粗鲁。 对于大型图形应用程序来说,Go 还不够成熟,我假设通过您使用 SDL,您要么已经是一个独立的游戏开发人员,希望以 Go 的形式尝试新的东西,要么是现有的 Go 程序员开发游戏的语言选择不当(尝试 C++ 或 Haskell,学习多种语言没有害处!;-))

      当然,您可能既不熟悉编程又不熟悉游戏开发,在这种情况下,我建议您尝试使用 Game Maker 或学习 C++ 教程。

      至于你的第二个问题,你可以使用 Go 的 'nil',因为据我所知,它仍然代表 '\0' 的 ASCII 字符。

      【讨论】:

      • 对不起,我不是要回避,但我问的是如何在 Go 中解决这个问题,而不是我可以使用哪些其他语言来代替 Go。如果您不懂一种语言,我建议您不要为它回答问题,因为它对任何人都没有帮助。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-06-07
        • 2020-11-26
        • 1970-01-01
        • 2020-04-17
        • 1970-01-01
        • 2014-05-03
        • 2016-06-25
        • 2017-01-24
        • 2016-09-06
        相关资源
        最近更新 更多