如何用包装另一个库的Qt编写共享库?

时间:2013-09-09 04:09:35

标签: qt shared-libraries wrapper

我正在尝试创建一个包含较低级别C库的Qt共享库,这意味着我不希望链接到库的调用代码访问该C库的头文件。

我正在执行here步骤,这似乎很简单。我在QtCreator中构建了一个SUBDIRS项目。库项目构建正常,所有类和C函数都标有扩展为Q_DECL_EXPORT的宏。该库定义了一些我想要包含在app项目中的标题。这里的问题是当我包含其中一个头时,链被跟随到包含的C库头,此时应用程序项目无法构建,因为它找不到该头。

Qt的文档特别指出了这个问题,但对于如何解决它却有点模糊。

#include <footronics/device.h>

 class MyDevice {
 private:
     FOOTRONICS_DEVICE_HANDLE handle;
 };
  

在部署库时,应该不依赖于内部头文件footronics / device.h或ui_widget.h。

那么,我怎样才能避免我从库中包含的标题,隐含地包含我正在包装的C库中的标题?

1 个答案:

答案 0 :(得分:3)

如果您只使用指针或对共享库类的引用,则可以使用Forward Declarations

class FooTronicsDevice;

class MyDevice {
private:
    FooTronicsDevice* _device;
}

编译器不需要知道类的结构,以便定义指针(或引用)。

如果无法做到这一点,您可以使用Qt文档中建议的Pointer to Implementation惯用法。 这基本上意味着您将实现与公共接口分开。