为啥找不到静态库头?

Posted

技术标签:

【中文标题】为啥找不到静态库头?【英文标题】:Why are static library headers not found?为什么找不到静态库头? 【发布时间】:2009-07-07 23:55:11 【问题描述】:

我使用Clint Harris' tutorial 来设置项目之间的代码共享,并且在我的计算机上一切正常。但是在我同事的机器上,编译器在构建时似乎没有从静态库项目中找到头文件。

我的同事通过克隆 git 存储库获得了我的项目。我们已经检查了所有相关的构建标志和 XCode 设置 n 次,但项目只是拒绝在他的机器上编译。

这是我要求我的同事做的,主要是从教程中复制和粘贴的:

    确保项目目录的完整路径中没有空格。 在项目目录中,创建另一个名为“build_output”的文件夹。 在 XCode 中,在“XCode > Preferences”下选择“Building”选项卡并将“Place Build Projects in”设置为“Customized location”,并指定您创建的公共构建目录的路径。 将“将中间构建文件放入”设置为“使用构建产品”。 选择“Source Trees”选项卡并通过单击“+”按钮并填写列来创建一个新的 Source Tree 变量。在“设置名称”和“显示名称”中,输入 [创建静态库的共享项目的名称]。在路径中,您放置了框架文件夹的完整路径。

按照这些步骤,使用静态库的项目应该在他的机器上编译和在我的机器上一样。但事实并非如此。基本上,他得到的错误是:

error: TheFrameworkHeader.h: No such file or directory

然后是由于缺少标头而导致的一串其他错误。

有解决此问题的策略吗?或者任何有类似经历并且可以分享一些来之不易的知识的人?我总结的说明中是否缺少任何内容?编译静态库的时候需要在Copy Headers build阶段设置header的角色吗?

【问题讨论】:

【参考方案1】:

尽管有一些有用的建议,但我从来没有想出过这个,但这里有一些信息给处于类似情况的任何人。我通过将原始项目一分为二来创建库和依赖项目。起初,库和应用程序只是同一个项目中的两个目标。后来,我将应用程序移到了一个单独的项目中。一切似乎都正常,我将两个项目都推送到了远程 git 存储库。但是,当这些被克隆到其他计算机上时,找不到库头。

后来,我发现我在原电脑上克隆项目时也出现了同样的错误。经过一番挣扎,我将其归结为一个可怕的细节:依赖项目文件夹的名称!(即包含应用程序的项目,而不是库。)不是.xcodeproject 包,不是应用程序标识符,而是包含文件夹的名称。一旦我改变它,一切都会起作用。如果我将其更改回原始名称(在任何计算机上),则再次找不到标题。

如果有人对此有任何见解,请发布答案!

编辑:自从我发布了这个问题后,另一个项目也出现了同样的问题,同样,只需重命名包含 .xcodeproject 文件夹的文件夹即可解决问题。

【讨论】:

我刚刚发生了同样的事情。 '十二生肖' == 不好。 '十二生肖' == 好。什么鬼? 我们三个人。也许是时候提交错误了。 哇,不可思议。这在我的项目中定期发生,没有明显的原因。重命名文件夹可以修复它。【参考方案2】:

我不认为是 Git,我认为是 xcode。我在这里遇到了一个非常相似的问题,其中 xcode / xcodebuild 错误地解析了一个包含路径(使其变得简单。)使用完全相同的库项目和 xcconfig 文件(从 svn repo 清理结帐)但另一个包含文件夹 - 它可以工作。所以,thanx 的解决方案,不要再责怪 Git 了 ;-)

【讨论】:

不,git 不再是嫌疑人之一 :) 目前还不清楚是什么导致了 xcode 的混乱。必须是项目文件中的某种元信息?【参考方案3】:

我经常忘记检查这一点:你确定丢失的文件(即 TheFrameWorkHeader.h”在 git 存储库中吗?很可能是你的构建设置是正确的,但是文件不知何故没有被添加到git 正确。

【讨论】:

不,它已签入存储库。【参考方案4】:

如果您在特定机器上构建时遇到问题,那么问题可能出在机器或用户设置上。例如environment variable(可能是 INCLUDE_PATH 或其亲属之一——XCode 使用 GCC)。你可能有一个“。”在这些变量之一中。

解决此问题的最佳方法是将所需的文件夹路径添加到构建脚本中的 -I 开关。

【讨论】:

谢谢,但我已经使用 Xcode 中目标上的构建面板来正确设置“用户标题搜索路径”(使用 Xcode 首选项中源树设置中设置的名称),并且这就是我为让它在我的开发箱上工作所做的一切。 (我还将“Other Linker Flags”设置为 -ObjC。)我现在已经在第三台计算机上尝试过这个,唯一可以运行的就是原始的开发箱。【参考方案5】:

仔细检查“Search Paths->User Header Search Paths”构建设置(对于所有配置)是否指向包含共享 Xcode 项目的目录(您可以使用您创建的新 Source Tree 变量)。

【讨论】:

非常感谢,但我已经检查了这个和所有其他可能的设置十几次。我仍然不知道出了什么问题,但会编辑问题以分享一些信息。 添加了一个新答案,因此问题不会被标记为未回答。

以上是关于为啥找不到静态库头?的主要内容,如果未能解决你的问题,请参考以下文章

如何从我的 Visual Studio 静态代码分析中排除库头?

gcc找不到静态库中的函数

cocoapods导入三方库头文件找不到问题

Pythonanywhere 'staticfiles' 不是有效的标记库:找不到模板库静态文件

cmake找不到静态库

gdbserver 找不到静态库课程