Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QLibrary:如何从一个.so文件创建两个实例?_C++_Qt_Function Pointers_Multiple Instances_Qlibrary - Fatal编程技术网

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

C++ QLibrary:如何从一个.so文件创建两个实例?,c++,qt,function-pointers,multiple-instances,qlibrary,C++,Qt,Function Pointers,Multiple Instances,Qlibrary,QLibrary可以从.so库的一个实例中获得一组函数指针。但是,当试图从同一个.so文件中获取两个不同的函数指针实例时,它不起作用。这两组指针都指向内存中相同的位置,这使得它们冗余且没有用处。根据Qt 5.12 QLibrary的文档: QLibrary的多个实例可用于访问同一物理库 他们没有说明这应该如何工作,所以您是否应该能够加载两个具有两个QLibraries的相同.so文件的实例?还是我误解了,你真的需要同一个图书馆文件的两份副本 如果我的解释不清楚,请输入以下代码: QLibrary

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
qlibraryloader1(“lib.so”);
loader1.load();
foo1=重新解释(loader1.resolve(“foo”);
foo1();
QLibrary loader2(“lib.so”);
loader2.load();
foo2=重新解释(loader2.resolve(“foo”);
foo2();
//foo1和foo2都调用foo函数的同一个实例,而不是单独的实例

您引用的文本是响应:


QLibrary的多个实例可用于访问同一物理库

两个例子:

QLibrary loader1("lib.so");
QLibrary loader2("lib.so");
但是相同的物理库。因此,这些函数位于相同的内存位置

加载库后,您将使用一个库


有一个库可以满足您的需要,但它不是Qt。

“可以使用QLibrary的多个实例”意味着,如果您使用库a,并且它确实
QLibrary(“libcrypto.so”)
,那么它将不会破坏同样具有
QLibrary(“libcrypto.so”)功能的库B
这并不意味着QLibrary对象的每个实例都会产生单独的代码。。。。事实上,这就是为什么。所以(共享对象)是为了防止。我担心会是这样。我将看看是否可以重写我的库,使其在内部更通用。谢谢