添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
纯真的核桃  ·  GitHub - ...·  1 月前    · 
叛逆的木瓜  ·  网站地图 - FARO®知識庫·  1 月前    · 
老实的刺猬  ·  gdb修改内存值-掘金·  1 年前    · 
Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode . Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).

Hello, I've been using QLibrary many times, however now I have a case when I want to load .so from PyQt . Following their docs it should be done the same way, but since it's python I don't follow why load() returns with False . Here is the simple .so code:

interface.h :

#ifndef INTERFACE_H
#define INTERFACE_H
#ifdef __cplusplus
extern "C" {
#endif
int  init(int argc, char** argv);
#ifdef __cplusplus
#endif

I have and a .cpp file :
interface.cpp

#include "interface.h"
#include "testwidget.h"
#include <QApplication>
int init(int argc, char **argv)
    QApplication a(argc, argv);
    MyWidget w;
    w.init();
    return  a.exec();

Assume that testwidget is just a 200 x 200 empty window. So here is what is happening in python:

import  os as UNIX
import  sys
from PyQt5 import QtCore
def main(*args, **kwargs):
    testlib = QtCore.QLibrary('/home/ilian/Qt/build-testpyqtlib-Desktop_Qt_5_8_0_GCC_64bit-Debug/libtestpyqtlib.so')
    res = testlib.load()
    if res:
        print("OK, loaded library!")
    else:
        print("Failed to load library!")
if __name__ == "__main__":
    main(sys.argv)

Don't fire at me why I am doing it with 'PyQt, it's something inherited and I have to work with it. Just tell me why this call fails here? Everything is in place as directories. It just does not loads the .so` file.

Regards.

#endif // INTERFACE_H

@ilian What init function do you mean? Is it a function from your library? If so then sip.voidptr probably means that it could not resolve the function.
See http://doc.qt.io/qt-5.9/qlibrary.html#resolve, you need to export your functions to be able to resolve them.

@ilian Please take a look at the link I posted before: you need to export your function, else it cannot be resolved.

You are aware that a.exec() will block until you close your app? That means init() call will block.

@jsulm I've made a similar C++ program with the function pointer, and it does what I want, open a widget and enters it's event loop. In short, as C++ program, loading the library everything is fine, as PyQt - it's not, or the reslove form PyQt and that sip.voidptr are some weird stuff, we know not of.