代码之家  ›  专栏  ›  技术社区  ›  Patroclus

导入静态库后,找不到头中的某些头

  •  1
  • Patroclus  · 技术社区  · 8 年前

    我的静态库是一个依赖于其他头的引擎。

    例如,在 XXXEngine.h

    #include "CommonUtil.h"
    #include "DebugLogger.h"
    

    所有这些文件都是在我构建静态库时添加的。所以我只出口 xxx发动机.h 作为API并隐藏我的实现。

    但问题是,当我将头文件导入到另一个项目时 .a 文件也已经添加了,我得到一些错误说 "CommonUtil.h" cannot be found . 它能找到 xxx发动机.h ,但不包括此文件中的头 . 但是 我不想暴露那些头文件 .

    我该怎么做才能解决这个问题?谢谢!

    1 回复  |  直到 8 年前
        1
  •  1
  •   Mike Kinghan Luchian Grigore    8 年前

    任何头文件 #include 在定义 库的API成为库的API的一部分。如果编译器不得不 找到 MyLib.h 然后它必须找到(递归的)每个头 #包括 -编辑 在里面 迈利布.h .

    所以如果你不想公开一个特定的头文件 图书馆的用户需要它,那么你就不能把它包括在 迈利布.h .

    代替,例如:-

    迈利布.h

    ...
    ...
    
    #include "private_header.h"
    #include "public_header.h"
    
    ...
    ...
    

    MyLib.m公司

    #include "MyLib.h"
    
    ...
    ...
    

    你需要重构如下:

    迈利布.h

    ...
    ...
    
    #include "public_header.h"
    
    ...
    ...
    

    MyLib.m公司

    #include "MyLib.h"
    #include "private_header.h"
    
    ...
    ...
    

    如果你的项目不能像那样编译,那么它就证明了 迈利布.h 需要声明 private_header.h ,但你不想让它曝光。 在这种情况下,重新考虑并重构代码,直到它没有。