c++ - 包含外部头文件的 qt 共享库

标签 c++ qt shared-libraries

我正在尝试分离我的一些代码并将其放在一个共享库中,我可以从其他地方使用它。在文档中:

http://doc.qt.io/archives/qt-4.7/sharedlibrary.html

他们说你不能链接到其他头文件。我如何才能将共享 header 包含到我的共享库中?

最佳答案

在您提供的链接中讨论的上下文中的共享库是 .so(共享对象)文件(.dll,Windows 上的动态链接库)或静态 (.lib) 库。 Qt 提供了这种库;许多其他供应商/项目也是如此。要在另一个应用程序(例如您的应用程序)中使用它们,您包含 header 并链接到库。

文章警告的是用户可能没有的 #includeing 头文件 - 即那些不属于您的项目的头文件。请记住,要让其他人使用您的新“共享库”,他们需要包含您提供的头文件。如果该文件包含他们没有的其他 header ,他们将收到错误。

为避免此问题,请在您的实现 (.cpp) 文件中执行 #include;这样,它们对 future 的用户是隐藏的。 Qt 推荐 "pointer-to-implementation" (pimpl)惯用语 - 所有实现细节都对类的用户隐藏,包括实现所依赖的任何和所有头文件。

您可以轻松地做同样的事情,即使您没有全力以赴使用 pimpl。目标是在您的 header 中仅#include 绝对必需的文件,希望所有这些文件都与您的库一起提供。

关于c++ - 包含外部头文件的 qt 共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9661414/

相关文章:

c++ - 使用 epoll 的套接字服务器在断开连接时给出未知字节

c++ - 向下转换 C++ 时的不正确行为

c++ - 如何计算 vector 的大小

C++ GetLine() 问题,命令行程序

qt - QPointer 和删除对象

c++ - 使用 QMathGL 连接信号和槽

python - 重新设置小部件pyqt的布局

build - Eclipse CDT,同时构建静态库和共享库

c - 用我自己的 close() 函数替换 Linux 中的 close() 函数

linux - 如何使用应用程序部署 Qt 库?