其他分享
首页 > 其他分享> > c – .dll插件,它使用主可执行文件中定义的函数

c – .dll插件,它使用主可执行文件中定义的函数

作者:互联网

我有一个主要的可执行文件加载.dll / .so插件,它在Linux上工作得很好但在Windows上(Visual Studio 2012),它失败了未定义的引用错误.

该插件使用session-> SendLine(“bla”)等函数,这些函数在Main可执行文件中定义. (在插件中包含的.h中定义的会话和方法类,但是在main exec中编译的.cpp中的实际函数).

tl; dr:“我需要Windows链接器来忽略插件中未定义的引用,在主可执行文件中定义”

什么是在Windows中“使其工作”的最佳方法,但在没有百万#ifdef的情况下保持与Linux兼容?

解决方法:

Windows上的库链接处理方式与在Linux上处理它的方式完全不同.从插件到主机可执行文件的链接在Linux上很简单,但在Windows上却没有那么多.

在Windows上,链接到外部模块的传统方法是使用由.lib文件提供的导入库.为了这样做,您需要为可执行文件创建一个导入库,其中包含插件需要调用的所有导出函数.我从来没有为可执行文件创建导入库.通常你是为DLL做的.我甚至不确定它是否适用于可执行文件.

其他一些选择:

>从可执行文件导出函数,并在插件中使用GetProcAddress在运行时绑定到它们.
>初始化插件时,传递包含所需功能的接口.

标签:c,plugins,visual-studio-2012,dll,undefined-reference
来源: https://codeday.me/bug/20190729/1568508.html