dll 和应用程序之间的 C++ extern 使用

标签 c++ dll extern

如果这是一个愚蠢的问题,请原谅我,但我正在看一本书,但它不起作用。 我有一个游戏引擎,它存在于一个 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/

相关文章:

google-chrome - 为什么我在 ClickOnce 部署后突然在 Chrome 中收到 "Not commonly downloaded"警告?

java - 当 Java 进程退出时,JNI DLL 使用的内存是否会返回?

c# - 如何使用 ctypes 访问 C# dll 中的方法?

objective-c - 何时何地从任意消息返回值初始化外部变量?

c++ - 通过取消引用在 C 中转换变量

c++ - 你在实际工作中使用过 boost::tribool 吗?

c++ - 是否允许 C++ 编译器发出编译同一程序的不同机器代码?

c++ - 在恒定时间内拼接完整列表

c++ - 在 c/c++ 中的源文件之间共享变量的最佳策略是什么?

c - 不同源文件中的共享变量