QLibrary:如何从一个.so文件创建两个实例



QLibrary可以很好地从.so库的一个实例中获得一组函数指针。但是,当试图从同一.so文件中获得两个不同的函数指针实例时,它不起作用。两组指针都指向内存中相同的位置,这使它们变得多余且毫无用处。根据Qt 5.12 Q图书馆文件:

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。

最新更新