我正在尝试构建一个使用Qt功能的简单库(没有事件循环,只是一些图像处理和文件加载),然后从标准的C
程序中调用该库。我已经回答了here的答案,但答案没有为我提供足够的信息来解决问题。我已经将库构建为要链接的静态库,并使用extern "C"
包装函数调用,但是从/usr/include/QtCore/qnamespace.h:-1: In function ‘QT_MODULE’:/usr/include/QtCore/qnamespace.h:54: error: unknown type name ‘namespace’.
开始,我收到了一堆错误
有没有人有关于从C
程序链接到Qt库的简短教程?仅供参考,一切都在Linux下(Fedora 15),C
程序和Qt库都是用QtCreator
构建的。
答案 0 :(得分:3)
假设你想创建一个包装器来创建和删除QImage
,可以这样做:
在您的标头文件中:
typedef void *my_qimage_t;
extern "C" my_qimage_t my_create_qimage(int width, int height);
extern "C" void my_delete_qimage(my_qimage_t image);
在您的源文件中:
extern "C" my_qimage_t my_create_qimage(int width, int height)
{
QImage *qimage = new Qimage(width, height);
return static_cast<my_qimage_t>(qimage);
}
extern "C" void my_delete_qimage(my_qimage_t image);
{
QImage *qimage = static_cast<QImage *>(image);
delete qimage;
}
从呼叫者的角度来看,my_qimage_t
类型是一个黑盒子。所有操作都必须通过你的库完成,方法是传递这个不透明的指针。