C++ [windows]反向链接

C++ [windows]反向链接,c++,windows,linker,C++,Windows,Linker,有一个共享类。声明器在共享头中,实现在主程序中。主程序加载DLL并从中执行一些函数,函数创建共享类的对象 测试代码: 共享_头.h: #include<stdio.h> class sharedClass{ public: sharedClass(); }; base.cpp->base.exe #include"shared_header.h" sharedClass::sharedClass(){ printf("Shared class is loaded!\n"); }

有一个共享类。声明器在共享头中,实现在主程序中。主程序加载DLL并从中执行一些函数,函数创建共享类的对象

测试代码:

共享_头.h:

#include<stdio.h>
class sharedClass{
public:
sharedClass();
};
base.cpp->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。很抱歉我的英语很糟糕。

Windows DLL与UNIX/Linux共享对象不完全相同

在Windows上,DLL必须完全链接并定义其所有引用。因此,当您的文件plugin.cpp引用sharedClass构造函数时,链接器将要求定义此构造函数并可用于创建DLL。无法在加载DLL的可执行文件中提供它


在UNIX/Linux上,共享对象的行为不同。它们的依赖关系在可执行文件加载时得到解决。因此,可执行文件可以提供共享对象所需的一些功能。

我不知道这种方法。你总是可以“用手”做事。我的意思是为缺少的构造函数定义一个函数指针,在DLL的加载函数中,必须加载包含它的DLL(EXE),并用它初始化函数指针。
Plugin is loaded!
Shared class is loaded!