有共享课程。声明器在共享头中,实现在主程序中。主程序加载DLL并从中执行一些函数,函数创建共享类的对象。
测试代码:
shared_header.h:
#include<stdio.h>
class sharedClass{
public:
sharedClass();
};
plugin.cpp - &gt; libplugin.dll
#include"shared_header.h"
extern "C"
void loader(){
printf("Plugin is loaded!\n");
new sharedClass;
}
base.cpp - &gt; base.exe
#include"shared_header.h"
sharedClass::sharedClass(){
printf("Shared class is loaded!\n");
}
int main(){
/*
some actions to load libplugin.dll and exec function loader
*/
return 0;}
所以,我想看看
Plugin is loaded!
Shared class is loaded!
它适用于Linux。但是当我在Windows上链接libplugin.dll时,我有错误“未定义引用sharedClass :: sharedClass()”。我需要链接程序和插件如何使用这种方式?
PS。 Mingw,稳定版。
PPS。对于我可怕的英语,我很抱歉。
答案 0 :(得分:1)
Windows DLL与UNIX / Linux共享对象不完全相同。
在Windows上,DLL必须完全链接并定义所有引用。因此,当您的文件plugin.cpp引用sharedClass构造函数时,链接器将要求定义此构造函数并可用于创建DLL。无法在加载DLL的可执行文件中提供它。
在UNIX / Linux上,共享对象的行为方式不同。它们的依赖关系在可执行文件加载时得到解决。因此,可执行文件可以提供共享对象所需的一些功能。