【问题标题】:How to deal with header files not provided with library如何处理库未提供的头文件
【发布时间】:2012-06-24 22:57:18
【问题描述】:

我将详细说明一个常见的假设问题。

问题:

我提供了一个静态库 libX.a 和头文件 a.hb.h。头文件a.hb.h 包含库导出的API。 a.h 包括 a1.hb.h 包括 b1.h。但是a1.hb1.h 不是库所有者提供的,因为a1.hb1.h 包含库私下使用的数据结构,并且所有者不想暴露这些数据结构。

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

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

问题:

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

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

【问题讨论】:

    标签: c++ static-libraries header-files


    【解决方案1】:

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

    至于第一个问题,您可以尝试删除那些包含行。它应该可以编译,但如果没有编译,那么创建者可能在私有头文件中隐藏了一些重要的东西,这对于除他之外的其他人使用他的库至关重要。

    【讨论】:

      【解决方案2】:

      1) 您可以查看nm 工具,参见SO: how to list symbols in a so-file。也许它也适用于静态库,我不确定。

      2) 库所有者可以使用Large scale C++ software design by John Lakos 中的技术来防止暴露内部结构。也许您可以使用其中的技术来创建a1.hb1.h 所需的部分,而无需依赖您没有的信息。尤其是声明结构/类而不定义其内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 2013-12-24
        • 1970-01-01
        • 2010-11-21
        相关资源
        最近更新 更多