mea*_*ers 19 c++ xcode objective-c include-path ios
在我的iOS项目中,我需要使用用C++编写的外部库.C++头文件都在一个目录中.
我已经将这些C++标题添加到我的Xcode项目中,并且还指定了标题搜索路径(在Build Settings中).
问题是这些C++标头使用<>尖括号互相包含.这导致:
'filename.h' file not found with <angled> include, use "quotes" instead.
Run Code Online (Sandbox Code Playgroud)
奇怪的是,Xcode不会抱怨所有标题.同样在一个文件中包含#include'd标题也没问题,而#include在另一个文件中则是一个问题.我认为这是因为这些标题#include彼此.
谢谢!
Mar*_*n R 34
#include <bla.h>
Run Code Online (Sandbox Code Playgroud)
用于标准库或框架标头,搜索策略与用于的标准不同
#include "bla.h"
Run Code Online (Sandbox Code Playgroud)
例如,参见
作为解决方法,您可以将Xcode构建设置"始终搜索用户路径"设置为YES.
Cou*_*per 13
从"空白"应用程序项目开始:
在应用程序的项目中创建一个文件夹"Libraries" - 最好是作为MyApp.xcodeproj文件的兄弟,但它可以在任何地方.为每个配置(调试,发布等)创建子文件夹,并可能为每个体系结构(armv7,armv7s,arm64)创建子文件夹,除非二进制文件是包含所有体系结构的通用二进制存档.
获取第三方库和静态库二进制文件的标题(对于不同的平台,配置和体系结构可能不止一个),并将它们移动到"Library"文件夹中,进入相应的子文件夹(您可能需要创建):
例如,假设您有一个通用二进制文件(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
Run Code Online (Sandbox Code Playgroud)"图书馆搜索路径"构建设置:
将"Libraries"文件夹拖到Xcode项目中.这可以在构建设置中自动创建库搜索路径.请验证这一点,如果不正确,请进行修复.
在给出示例的情况下,为Debug和Release Configuration添加以下库搜索路径:
调试: 库搜索路径:$(SRCROOT)/Libraries/Debug-iphoneos
发布:图书馆搜索路径:$(SRCROOT)/Libraries/Release-iphoneos
对于特定的配置和目标平台对,您可能具有不同的库搜索路径.相应地在构建设置中设置不同的路径.
"标头搜索路径"构建设置:
在给出示例的情况下,将以下标头搜索路径添加到Debug和Release Configuration:
调试:标头搜索路径:$(SRCROOT)/Libraries/Debug-iphoneos/include
发布:标题搜索路径:$(SRCROOT)/Libraries/Release-iphoneos/include
同样,对于特定的配置/目标对,您可能有不同的路径 - 尽管标头可能相同.
通过添加-lc++到Other Linker Flags构建设置,将您的应用程序与C++标准库链接.
导入文件中的标题,如下所示:
#import <ThirdParty/third_party.hh>
Run Code Online (Sandbox Code Playgroud)在 Xcode 9 中,我需要将头文件路径添加到Header Search Paths构建设置,而不是User Header Search Paths.
Xcode 将User Header Search Paths作为-iquote选项附加到编译命令,但附加Header Search Paths为-I选项。这是关键的区别。