我不能得到一个执行加载函数在使用Qt库工作
I can not get an execute-on-load function to work in a library using Qt
我有几个库,每个库实现一个类(从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内部使用。
相关文章:
- 是否有原子加载非原子值的函数?
- 如何修复加载图标()函数不显示图标?
- GLFW DDS 加载函数的 OpenGL 链路错误
- 为什么这个加载函数只抓取文件中的第一件事?
- 使用动态链接加载程序 <dlfcn.h> 而不是直接函数调用的目的是什么?
- 加载由 MATLAB Coder 生成的带有函数的 DLL,该函数调用外部函数
- Linux c++.在预加载的共享库中定义的基类的崩溃调用函数
- 空函数的参数是否加载到缓存中?
- 从动态加载的 dll 内部调用C++函数
- 对外部函数的调用是否强制从内存加载
- 无法使用c++/cli包装从c#dll加载函数
- C/C++函数动态加载器(helper)
- 如何动态加载和调用具有特定于库的类型作为函数参数的符号
- 使用 QOpenGLWidget 加载 OpenGL 函数指针
- 无法从 dll 加载函数
- 使用loadFromFile()函数加载文件
- 如何使用ffi将WinApi函数加载到Node.js中
- 如何使用ASSIMP的ReadFile函数加载多个模型
- 关于 Vulkan 中的函数加载器
- 是否有可能在程序执行过程中通过函数加载精灵、纹理和音乐?