c++ - 如何处理库未提供的头文件

标签 c++ static-libraries header-files

我将详细介绍一个常见的假设问题。

问题:

我提供了一个静态库libX.a以及头文件a.hb.h。头文件 a.hb.h 包含库导出的 API。 a.h 包含 a1.hb.h 包含 b1.h。但是 a1.hb1.h 不是由库的所有者提供的,因为 a1.hb1.h 包含库私有(private)使用的数据结构,所有者不想公开这些数据结构。

我必须编写一个应用程序来调用库导出的 API。因此,我必须包含 a.hb.h,其中包含 API 的声明。

好的,好的。我编写应用程序并包含头文件 a.hb.h 并调用 API。但是我会收到编译器错误,因为编译器找不到 a.h 内部包含的 a1.hb1.h >b.h.

问题:

  1. 这个问题有解决办法吗?如果是,请认真寻求解决方案:)

  2. 库所有者是否有必要公开他在库中内部使用的所有私有(private)头文件?

最佳答案

我将从最后一个开始。库的所有者可以隐藏包含私有(private)信息的 header ,但他必须确保公共(public) header 不依赖于那些私有(private)信息,即它们不能包含它们!

对于第一个问题,您可以尝试删除那些包含行。它应该可以编译,但如果不能编译,则创建者可能在私有(private) header 中隐藏了一些重要的内容,这些内容对于除他之外的其他人使用他的库至关重要。

关于c++ - 如何处理库未提供的头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11177989/

相关文章:

c++ - 我不明白这个快速排序的实现

c++ - 使用 C++ 创建 MAPI 配置文件

ios - 从同一应用程序中的框架访问 iOS 应用程序中嵌入的静态库

c++ - 静态库;未使用的符号;标题中的定义

c++ - 圈到圈交点

objective-c - 如何弱导入一个类从一个静态库到另一个库(Objective-C)

c - 是否有一种干净的可移植方式来处理 "build"包含文件名

c++ - 头文件包含静态分析工具?

java - 查找移动到不同位置的文件的新位置 - Java

c++ - 函数模板中的参数推导