[windows]回链接

时间:2009-11-25 09:39:10

标签: c++ windows linker

有共享课程。声明器在共享头中,实现在主程序中。主程序加载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。对于我可怕的英语,我很抱歉。

1 个答案:

答案 0 :(得分:1)

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

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

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