【问题标题】:Linking sdl2 (undefined reference to SDL functions) in chicken scheme在鸡计划中链接 sdl2(对 SDL 函数的未定义引用)
【发布时间】:2020-01-16 08:59:00
【问题描述】:

我正在尝试通过使用 sdl 编写一个简单的游戏来学习鸡计划。我正在尝试创建一个外部函数来初始化 SDL:

(use foreigners lolevel)

(foreign-declare "#include <SDL2/SDL.h>")

(define (sdl-init)
  (foreign-lambda* int ((int val))
    "if (SDL_Init(SDL_INIT_VIDEO) < 0) {
    SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, \"Couldn't initialize SDL: %s\",
                 SDL_GetError());
    exit(1);
  }
  "))

我得到错误:

undefined reference to `SDL_Init'
undefined reference to `SDL_GetError'
undefined reference to `SDL_LogError'

所以它找不到 SDL。通常在 C 中你会做这样的事情(来自 sdl 页面):

gcc -o test test.c sdl-config --cflags --libs

有没有办法在编译 .scm 文件时添加这些标志。

【问题讨论】:

    标签: sdl sdl-2 chicken-scheme


    【解决方案1】:

    我建议使用sdl2 egg。如果您仍然喜欢构建自己的到 sdl2 的绑定,您可以使用这样的东西:

    csc test.scm -C "`sdl-config --cflags`" -L "`sdl-config --libs`"
    

    另外我注意到您仍在使用不再维护的 CHICKEN 4;您可能需要考虑更新到 CHICKEN 5。

    【讨论】:

    • 感谢您的帮助,这正是我想要的。我想自己做绑定,这样我就可以学习如何使用外国代码。我对 lisp / chicken 方案很陌生,但一直想学习它。我也会升级到鸡5。
    • 有没有命令可以查看你使用的是什么版本?类似“csc --version”的东西?
    • 正是这样:)
    • 对于未来的访问者,sdl-config 可能需要是 sdl2-config。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2017-01-24
    • 1970-01-01
    相关资源
    最近更新 更多