如果这是一个愚蠢的问题,请原谅我,但我正在看一本书,但它不起作用。 我有一个游戏引擎,它存在于一个 dll 中。它有几个外部函数可以在实际游戏应用程序中使用:
extern void game_preload();
这一切都非常完美和花花公子,但是当我去构建所有这些时,我得到了一个错误:
Undefined reference to `game_preload()'
这是为什么?我怎样才能得到它来构建 dll,以便我可以在应用程序中实现这些功能?
我正在关注的书名为“Advanced 2D game development”,它没有提到存在问题。
编辑:我读错了这本书,我应该制作一个静态库而不是动态库。但请问有没有类似于动态库的“extern”用法?
最佳答案
您必须链接静态或动态库(对于 MSVC,这是一个扩展名为“lib”的文件,对于 GCC,这是“a”、“o”或“dll”,具体取决于您的系统等.). extern
关键字用于告诉编译器一些变量可以在另一个编译单元中找到(类似于前向声明,但用于变量)。无论如何,函数原型(prototype)始终是 extern
,因此可以省略它。
还有一种特殊情况,即使用 extern "C"
明确告诉编译器将某些代码作为 C 而不是 C++ 来处理(例如,链接到 C++ 代码中的 C 样式函数)。
编辑:创建和使用静态库更容易做到。 You can read up on this including some examples here.但是我认为应该在书中的某些部分对其进行解释,除非您到目前为止不应该使用任何库(如评论之一所述)。
关于dll 和应用程序之间的 C++ extern 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11376633/