C++ C++;dll和应用程序之间的外部使用

C++ C++;dll和应用程序之间的外部使用,c++,dll,extern,C++,Dll,Extern,如果这是一个愚蠢的问题,请原谅我,但我正在看一本书,它不起作用。 我有一个游戏引擎,它存在于一个dll中。它有两个外部功能可用于实际的游戏应用程序: extern void game_preload(); 这一切都是完美和美妙的,但当我去建立所有我得到一个错误: Undefined reference to `game_preload()' 为什么会这样?如何让它构建dll,以便在应用程序中实现这些功能 我下面的这本书叫做《高级2D游戏开发》,它没有提到这是一个问题 编辑:我看错了这本书,我

如果这是一个愚蠢的问题,请原谅我,但我正在看一本书,它不起作用。 我有一个游戏引擎,它存在于一个dll中。它有两个外部功能可用于实际的游戏应用程序:

extern void game_preload();
这一切都是完美和美妙的,但当我去建立所有我得到一个错误:

Undefined reference to `game_preload()'
为什么会这样?如何让它构建dll,以便在应用程序中实现这些功能

我下面的这本书叫做《高级2D游戏开发》,它没有提到这是一个问题


编辑:我看错了这本书,我应该建立一个静态库而不是动态库。但是我可以问一下,对于动态库,是否有类似于“extern”的用法吗?

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

<> P>还有一个特殊的例子,使用<代码>外部> C >代码>,明确地告诉编译器处理一些代码,而不是C++(例如,链接到C++代码内部的C样式函数)。
编辑:创建和使用静态库更容易。然而,我认为应该在书中的某个部分对其进行解释,除非到目前为止你不应该使用任何库(如其中一条评论所述)。

那么我是否要删除“Extern”?它们在dll中,因此我无法链接任何内容,因为我正在构建dllConsider它过时了。您必须链接库,但要告诉您如何操作,了解编译器是很重要的。mingw、gcc是我的编译器。我应该链接什么库?我唯一链接的是SDL和OpenGL如果你已经创建了自己的静态库,你就必须像链接SDL和OpenGL一样链接它(参见我在回答中添加的链接)。在DLL中使用
\u declspec(dllexport)
,在应用程序中使用
\u declspec(dllimport)
?(
uu declspec(dllimport)void game_preload();
)(它仅适用于静态链接。)如果您按照本书中关于设置VC项目的说明进行操作,那么您将创建一个EXE项目,而不是DLL项目。需要编写自己的游戏预加载函数,这就是创建自定义游戏的方式。