gpt4 book ai didi

c++ - 我无法使用 Qt 在库中使用加载时执行函数

转载 作者:行者123 更新时间:2023-11-28 07:01:51 25 4
gpt4 key购买 nike

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

Automatically executed functions when loading shared libraries

How exactly does __attribute__((constructor)) work?

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

QMAKE_LFLAGS_RELEASE += -Wl,-init,libinitfunc

这些都不起作用。

我还应该指出,我正在交叉编译这些库以在使用 busybox 实现大部分功能的嵌入式 ARM 设备上运行。

最佳答案

因为这是 C++ 代码,所以您不需要 C 风格的 hack。

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 本身内使用。

关于c++ - 我无法使用 Qt 在库中使用加载时执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22331260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com