如果这是一个愚蠢的问题,请原谅我,但我正在关注一本书而且它无效。 我有一个游戏引擎,它住在一个DLL中。它有几个外部函数可用于实际的游戏应用程序:
extern void game_preload();
这一切都很完美和花花公子,但是当我去构建所有这些时,我得到一个错误:
Undefined reference to `game_preload()'
这是为什么?如何构建dll以便我可以在应用程序中实现这些功能?
我所关注的这本书被称为“高级2D游戏开发”,并没有提到存在问题。
编辑:我错误地读了这本书,我应该创建一个静态库而不是动态库。但请问有没有类似动态库的“外部”用法?答案 0 :(得分:0)
你必须链接静态或动态库(对于MSVC,这是一个带有“lib”扩展名的文件,对于GCC,这是“a”,“o”或“dll”,具体取决于你的系统等等)。 extern
关键字用于告诉编译器一些变量可以在另一个编译单元中找到(如前向声明,但对于变量)。函数原型总是extern
,因此可以在那里省略。
还有一种特殊情况,即使用extern "C"
明确告诉编译器将某些代码作为C而不是C ++处理(例如,链接到C ++代码中的C样式函数)。
编辑:创建和使用静态库更容易。 You can read up on this including some examples here.但我认为应该在书的某些部分对其进行解释,除非你到目前为止不应该使用任何图书馆(如其中一条评论所述)。