框架头在Xcode中找不到它自己的头文件?

问题描述:

在Xcode中,假设有一个名为Foo的框架。在Foo.framework/Headers文件夹内有文件File1.hFile2.h。头文件File1.h通过以下指令包括File2.h框架头在Xcode中找不到它自己的头文件?

#include <File2.h> 

Foo框架++库不专门针对Mac的一个C的重新包装。

现在假设我有一个链接到Foo框架的项目。它有一个文件MyFile.mm,包括通过以下指令File1.h

#import <Foo/File1.h> 

现在,当我试图编译MyFile.mm,它总是因为找不到File2.h失败。如何在不修改Foo框架的头文件的情况下编译并运行它?

为了好奇,所讨论的实际框架是取自Max源树的Taglib的框架打包版本。我试图包括的文件是<taglib/mp4.tag>和编译.mm文件,其中包括它总是失败,因为mp4tag.h包括<tag.h>没有在include指令中的<taglib/...>前缀。错误不仅出现在这一个头文件中,而且在大量头文件中也存在类似的问题,因此修改所有这些包含语句都不是微不足道的。所有需要的“缺失”头文件实际上存在于框架的Header子目录中。

我想在我的应用程序中使用Taglib,虽然我能够将Taglib作为一个带有头文件的框架进行编译并将其添加到我的应用程序中,但由于问题,我似乎无法获得应用程序编译以上。

有人有指针吗?

谢谢。

+0

听起来我觉得这个框架存在一个bug - 它应该为它的'#import'语句使用相同的前缀,它期望框架的用户使用它。 – 2010-06-26 16:24:45

+0

这个框架不是特定于Mac OS X的,它们是C/C++源代码(框架中没有Objective-C源代码)。 – adib 2010-06-27 16:59:20

我认为File1.h应该说:

#include "File2.h" 

尝试检查在Xcode “始终搜索用户路径” 选项。

+0

选中“始终搜索用户路径”(这是默认选项)。 File1.h是开源库的一部分,它不只是一个文件(即有许多头文件以相同的方式在库中包含其他头文件)。 – adib 2010-06-27 16:58:14

+1

好的,在这一点上,我确信框架设置不正确。如果你不能修复它,那么你需要添加一个头部搜索路径到框架的Headers文件夹。 – JWWalker 2010-06-27 17:57:33

+0

如何判断框架是否设置正确? – adib 2010-06-28 05:20:53

下面是解决它的步骤:使用“的#include”

  1. 更改代码在File1.h。
  2. 在框架项目/默认目标/构建阶段中,设置“复制文件”阶段并添加File1.h和File2.h。
  3. 确保“复制文件”阶段在“编译”阶段之前。

这应该解决这个问题,因为框架将使用与使用框架的代码完全相同的方式引用文件。