2011-07-12 43 views
0

我对以下Linux和Windows,GCC,MinGW和MSVC(如果可能)问题的解决方案感兴趣。共享库目标文件链接

我有一个应用程序,我写了支持用户定义的共享库导入(添加模块)。应用程序扫描目录,查找* .dll文件或* .so文件,并在运行时动态加载它们。

到目前为止,所有的用户模块已经完全由自足代码组成。也就是说,构成DLL/SO的目标文件从链接器的角度看并没有得到不完整的引用。

不,我希望模块能够使用编译到构成导入这些模块的二进制应用程序的对象文件中的函数。换句话说,我想让他们使用我的一些库代码,而不必编译到DLL/SO本身。不幸的是,在构建DLL/SO的链接器阶段,这会失败,并且抱怨存在未解析的符号。

这可能吗?

回答

2

使用您要在用户模块和程序之间共享的代码创建一个库。 现在用户程序和程序可以链接到这个新库。

0

我的第一个想法是:找出另一种方法来做到这一点...要求附加组件通过已知的接口类型进行通信,然后将不需要尝试欺骗链接器...

1

为什么不只是制作一个由主应用程序和所有用户库链接的DLL ......这是完全合法的,安全的,并做你想要的AFAICT。

1

至于Linux和其他ELF平台,这是完全可能的。您只需从可执行文件中导出适当的符号,并且它们将优先于动态库中的相同符号。详情请参阅this question

正如该问题的答案之一所示,您可以将想要导出为回调的函数传递给动态库中的某个初始化函数。