它非常适用于Mac create a loadable plugin as a bundle并使其在主机可执行文件中使用符号。如何在Linux和Windows上完成?
我听说Linux上的-rdynamic
可能派上用场,但就Windows而言,我完全不知所措。
关键是要远离将主机和插件链接到共享库和静态构建的主机。
答案 0 :(得分:1)
我经常看到的一个插件模型是在插件中调用一个初始化函数,并在宿主可执行文件中传递一个包含函数指针的结构或类。
答案 1 :(得分:1)
此链接可能也是一个解决方案: dlopen() .so fails to find symbols in a stripped executable
主要思想是对可执行文件使用链接器选项-E( - export-dynamic)(或使用--dynamic-list并明确命名DSO可以访问的符号)。
答案 2 :(得分:0)
您可能希望为Windows使用略有不同的模型。如果使用跨平台框架,您应该可以使用IFDEF。
LoadLibrary函数允许您将DLL的名称作为字符串传递给它。然后,您可以通过名称获取库中各种函数的地址,并将它们指向函数指针。
答案 3 :(得分:0)
为了确保我理解,您希望能够动态加载和卸载插件DLL,这些DLL将自动解析仅在主机应用程序中定义的符号,对吗?我不认为这在Windows下是可能的(我不知道Linux)。一种选择是将主机功能移动到每个人链接到的共享静态库中,但这可能是不可能的,因为它需要提供特定于主机的功能。我认为唯一可行的选择是Zan的方法。
答案 4 :(得分:0)
显然, 是实现此目的的一种方法,但它是relies on a hard-coded dependency到主机可执行文件。