在运行时链接C ++ .o文件

时间:2014-05-08 16:56:32

标签: c++

我最近开始尝试动态编译/链接C ++代码。假设我有一个运行MyApp.exe的应用程序。我希望该程序加载一些编译的目标文件(.o)并执行所有链接的东西。是否可以或我需要共享库?

2 个答案:

答案 0 :(得分:3)

  

是否可能

  

或者我需要一个共享库?

这正是共享库 的原因!

更新

对于插件系统,您应该查看系统API函数

  • LoadLibrary GetProcAddress(Windows)
  • dlopen dlsym(Linux,* BSD,MacOS)

实现插件的推荐方法是,只有一个特定名称的函数,对于插件导出的所有插件模块都是通用的。

此功能有两个目的:

  1. 初始化插件
  2. 使用指向插件函数的指针填充函数指针的结构
  3. 通过这种方式,插件的用户只需通过一些系统函数调用即可获取所有插件的符号,而无需通过无数次调用dlsymGetProcAddress来乱丢代码。

答案 1 :(得分:2)

理论上可行,但可能不实用。在Windows上,您无法使用.obj动态加载对象(LoadLibrary)文件,因此您可以先将对象链接到DLL中。这将需要一个链接器(以及静态库依赖项等)与用于生成目标文件的编译器兼容,了解对象的相应链接器标志等。

通常,生成所需的DLL作为执行编译的同一构建过程的一部分更有意义。这个过程可以更好地获得所有必要的工具和信息。