5

如果这是一个愚蠢的问题,请原谅我,但我正在关注一本书并且它不起作用。我有一个游戏引擎,它存在于一个 dll 中。它有几个外部函数可以在实际的游戏应用程序中使用:

extern void game_preload();

这一切都很完美而且很花哨,但是当我去构建所有东西时,我得到了一个错误:

Undefined reference to `game_preload()'

为什么是这样?我怎样才能让它构建出 dll,以便我可以在应用程序中实现这些功能?

我正在关注的书名为“高级 2D 游戏开发”,它没有提到存在问题。

编辑:我读错了这本书,我应该制作一个静态库而不是动态库。但是我可以问一下有什么类似于动态库的“外部”用法吗?

4

1 回答 1

0

您必须链接静态或动态库(对于 MSVC,这是一个带有“lib”扩展名的文件,对于 GCC,这是“a”、“o”或“dll”,具体取决于您的系统等)。该extern关键字旨在告诉编译器某些变量可以在另一个编译单元中找到(如前向声明,但用于变量)。无论如何,函数原型总是extern存在的,因此可以在此处省略。

还有一种特殊情况是使用extern "C"明确告诉编译器将某些代码作为 C 而不是 C++ 处理(例如,链接到 C++ 代码中的 C 风格函数)。

编辑:创建和使用静态库更容易。您可以阅读此内容,包括此处的一些示例。但是我认为它应该在书中的某些部分进行解释,除非你到目前为止不应该使用任何图书馆(如评论之一所述)。

于 2012-07-07T16:21:32.950 回答