我最近开始尝试动态编译/链接C ++代码。假设我有一个运行MyApp.exe的应用程序。我希望该程序加载一些编译的目标文件(.o)并执行所有链接的东西。是否可以或我需要共享库?
答案 0 :(得分:3)
是否可能
是
或者我需要一个共享库?
这正是共享库 的原因!
对于插件系统,您应该查看系统API函数
LoadLibrary
GetProcAddress
(Windows)dlopen
dlsym
(Linux,* BSD,MacOS)实现插件的推荐方法是,只有一个特定名称的函数,对于插件导出的所有插件模块都是通用的。
此功能有两个目的:
通过这种方式,插件的用户只需通过一些系统函数调用即可获取所有插件的符号,而无需通过无数次调用dlsym
或GetProcAddress
来乱丢代码。
答案 1 :(得分:2)
理论上可行,但可能不实用。在Windows上,您无法使用.obj
动态加载对象(LoadLibrary
)文件,因此您可以先将对象链接到DLL中。这将需要一个链接器(以及静态库依赖项等)与用于生成目标文件的编译器兼容,了解对象的相应链接器标志等。
通常,生成所需的DLL作为执行编译的同一构建过程的一部分更有意义。这个过程可以更好地获得所有必要的工具和信息。