我不能得到一个执行加载函数在使用Qt库工作

I can not get an execute-on-load function to work in a library using Qt

本文关键字:函数 加载 工作 Qt 执行 一个 不能      更新时间:2023-10-16

我有几个库,每个库实现一个类(从QObject派生)。我希望这些库中的每一个都能在第一次加载时执行一个函数。我在这里发现了几个类似的问题:

加载共享库时自动执行的函数

__attribute__((constructor))到底是怎么工作的?

但是我根据答案创建的任何初始化函数都不会执行。我试过在命名空间中创建函数,在命名空间之外(而不是我类的一部分),使用__attribute__((构造函数)),将其命名为_init,并将函数名称指定为链接器:

QMAKE_LFLAGS_RELEASE += -Wl,-init,libinitfunc

这些都没有成功。

我还应该注意到,我正在交叉编译这些库,以便在嵌入式ARM设备上运行,该设备使用了busybox的大部分功能。

由于这是c++代码,因此不需要C风格的修改。

class LibInstance {
public:
  LibInstance() {
    qDebug() << __FILE__ << "has been initialized";
  }
  ~LibInstance() {
    qDebug() << __FILE__ << "has been unloaded";
  }
}
Q_GLOBAL_STATIC(LibInstance, libInstance)
class LibExecutor {
  LibExecutor() { libInstance(); }
};
static LibExecutor libExecutor;

LibExecutor的实例保证在main()开始运行之前以非线程安全的方式被构造;或者在库完成加载之前,如果它是按需加载的。LibExecutor的构造函数然后使用Q_GLOBAL_STATIC实现来线程安全执行LibInstance的构造函数。

LibInstance的构造函数中放置了所需的初始化功能。析构函数将在库被卸载时调用。

它通常是安全的,跨平台的,并且在Qt内部使用。