在我的iOS项目中,我需要使用用C ++编写的外部库。 C ++头文件都在一个目录中。
我已将这些C ++标题添加到我的Xcode项目中,并且还指定了标题搜索路径(在构建设置中)。
问题是这些C ++标头包含彼此使用< >尖括号。这导致:
'filename.h' file not found with <angled> include, use "quotes" instead.
奇怪的是Xcode没有抱怨所有标题。同样在一个文件中包含#include'd标题也没问题,而#include在另一个文件中则是一个问题。我认为这是因为这些标题相互匹配。
谢谢!
答案 0 :(得分:34)
#include <bla.h>
用于标准库或框架标头以及搜索策略 与用于
的不同#include "bla.h"
参见例如
作为解决方法,您可以将Xcode构建设置“始终搜索用户路径”设置为YES。
答案 1 :(得分:13)
从&#34;空白&#34;开始应用项目:
创建一个文件夹&#34; Libraries&#34;在你的应用程序的项目中 - 最好是你的MyApp.xcodeproj文件的兄弟,但它可以在任何地方。为每个配置(调试,发布等)创建子文件夹,并可能为每个体系结构(armv7,armv7s,arm64)创建子文件夹,除非二进制文件是包含所有体系结构的通用二进制存档。
获取第三方库和静态库二进制文件的标题(对于不同的平台,配置和体系结构,可能不止一个)并将它们移动到&#34; Library&#34;将文件夹放入相应的子文件夹(您可能需要创建):
例如,假设您拥有该库的通用二进制文件(armv7,armv7s,arm64)以及Debug和Release版本: 现在,假设文件夹结构如下:
$(SRCROOT)/Libraries
Debug-iphoneos
include
ThirdParty
third_party.hh
...
libThirdParty.a
Release-iphoneos
include
ThirdParty
third_party.hh
...
libThirdParty.a
MyApp.xcodeproj
&#34;图书馆搜索路径&#34;构建设置:
拖动&#34;图书馆&#34;进入Xcode项目的文件夹。此可以在构建设置中自动创建库搜索路径。请验证这一点,如果不正确,请修复它。
根据示例,为Debug和Release Configuration添加以下库搜索路径:
调试:图书馆搜索路径:$(SRCROOT)/Libraries/Debug-iphoneos
发布:图书馆搜索路径:$(SRCROOT)/Libraries/Release-iphoneos
对于特定的配置和目标平台对,您可能具有不同的库搜索路径。相应地在构建设置中设置不同的路径。
&#34;标题搜索路径&#34;构建设置:
给出示例,将以下标题搜索路径添加到Debug和Release Configuration:
调试:标题搜索路径:$(SRCROOT)/Libraries/Debug-iphoneos/include
发布:标题搜索路径:$(SRCROOT)/Libraries/Release-iphoneos/include
同样,对于特定的配置/目标对,您可能有不同的路径 - 尽管标题可能相同。
将-lc++
添加到其他链接标记构建设置,将您的应用与C ++标准库相关联。
按如下方式导入文件中的标题:
#import <ThirdParty/third_party.hh>
答案 2 :(得分:3)
在Xcode 9中,我需要将标题文件路径添加到Header Search Paths
构建设置,而不是User Header Search Paths
。
Xcode会将User Header Search Paths
附加到编译命令-iquote
选项,但会将Header Search Paths
附加为-I
个选项。这是关键的区别。
答案 3 :(得分:0)
在设置&#34;用户标题搜索路径&#34;之后的XCode中要指向您图书馆的目录,您还必须确保一个名为&#34;始终搜索用户路径&#34;的字段。设置为&#34;是&#34;
这解决了我遇到的问题:使用&lt; boost / signals2.hpp&gt;找不到文件&lt; angled&gt;包括,使用&#34;引用&#34;代替。
答案 4 :(得分:0)
我为OSX / Mysql支付2美分。 (顺便说一句,我问为什么在mysql中伪造了<>...。)
根据Xcode 11警告,“强烈建议禁用它。”
我更喜欢修补其他设置,将“始终搜索用户路径”保留为“否”。
我设置:
HEADER_SEARCH_PATHS =“ / usr / local / mysql / include”。
LINKER:
我) 如果出现链接错误,通常在“ / usr / local / mysql / lib”中添加“ libmysqlclient.a”,只需从Finder中拖动即可。
II:您可能会遇到最严重的错误...
“ / usr / local / lib / libmysqlclient.21.dylib:(/usr/local/lib/libmysqlclient.21.dylib)中的代码签名不适用于在使用库验证的过程中使用:映射过程和映射文件(非平台)具有不同的团队ID”
该lib未签名。只需在权利中:
(以XML格式): ..
<dict>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
</dict>
...