我有我正在尝试重新设计的遗留 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/