g++ - 如何告诉 c++ 链接器某些类稍后将由 dlopen 添加

标签 g++ shared-libraries dlopen

我有我正在尝试重新设计的遗留 c++ 代码。
我想从项目中取出部分代码作为“.so”共享库,并通过“dlopen”动态加载它们。
我编写了一个动态加载机制,可以在运行时动态加载新模块。
现在我想将现有模块与主项目分离。
例如,我从主项目中提取了模块“X”并创建了可以稍后加载的共享库,但是主项目的某些部分直接使用模块 X 的类,我还不能更改它们。
我可以使用模块 X 的头文件编译项目,但链接器会抛出“ undefined reference ”错误。
我如何告诉 c++ 链接器这些类将在运行时由 dlopen 机制稍后添加?
注意:我可以通过在“/lib”文件夹中复制模块 X 的创建“.so”文件来链接和运行项目,并在通过“-lX”标志链接时使用它,但是如果我从/lib 文件夹中删除该文件,则项目启动失败。

最佳答案

我知道如果你直接使用 X 的类,你必须将 X.so 链接到你的程序。但是如果你链接 X.so 你可以在运行时使用 dlopen 。

关于g++ - 如何告诉 c++ 链接器某些类稍后将由 dlopen 添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46681036/

相关文章:

c++ - -finstrument-functions 不适用于动态加载的 g++ 共享对象 (.so)

Ubuntu 与 cc1plus - 错误未实现

c++ - 虚拟方法上的 g++ [[noreturn]]

c++ - g++ 不能在 Mac OS X Mavericks 上编译

iphone - 通过我的应用分享相机胶卷中的照片

ubuntu - 无法使用 .so 文件安装共享库

c++ - cc1plus : error: unrecognized command line option "-fsysroot=<path>" with g++

c++ - 我如何调用外部函数?

C++ 运行时类型与 Python 模块不匹配?

c - 如何在 C 中查看 Linux 内存映射信息?