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