c++ - QLibrary:如何从一个 .so 文件创建两个实例?
问题描述
QLibrary 可以很好地从 .so 库的一个实例中获取一组函数指针。但是,当尝试从同一个 .so 文件中获取两个不同的函数指针实例时,它不起作用。两组指针都指向内存中的相同位置,这使得它们变得多余且无用。根据 Qt 5.12 QLibrary 的文档:
QLibrary 的多个实例可用于访问同一个物理库。
他们没有说这应该如何工作,那么您是否应该能够使用两个 QLibraries 加载同一个 .so 文件的两个实例?还是我误会了,您真的需要同一个库文件的两个副本?
如果我的解释不清楚,请使用以下代码:
QLibrary loader1("lib.so");
loader1.load();
foo1 = reinterpret_cast<foo>(loader1.resolve("foo"));
foo1();
QLibrary loader2("lib.so");
loader2.load();
foo2 = reinterpret_cast<foo>(loader2.resolve("foo"));
foo2();
// foo1 and foo2 both call the same instance of the foo function instead of separate instances
解决方案
您引用的文本是响应:
QLibrary 的多个实例可用于访问同一个物理库。
两个实例:
QLibrary loader1("lib.so");
QLibrary loader2("lib.so");
但同一个物理图书馆。所以函数在同一个内存位置。
加载库后,您将使用一个库。
有一种方法可以满足您的需要,但它不是 Qt。
推荐阅读
- javascript - 异步箭头函数预期没有返回值
- javascript - 我可以阻止 JS 通过 iframe 加载吗?
- fortran - 参考槽空 FORTRAN 指针 main
- reactjs - 如何在 React Material UI 中将 dilog 角中的 2 个按钮与其中的空格对齐
- python - 关联规则数据挖掘中基于子集的过滤规则
- python-3.x - 如果找到匹配则返回位置
- arrays - 使用 malloc 函数后无法将我的结构矩阵传递给函数
- swift - 表达式类型不明确,没有返回“某些视图”的函数的更多上下文
- python - 为什么我不能运行程序直到游戏结束
- keycloak - 如何配置 Keycloak 并通过 REST API 完成所有步骤并获得 JWT?