iOS 项目无法在部署目标 7.0 的 xcodebuild 下编译,但对于 6.0 没问题。在 Xcode 下为两者编译
iOS project fails to compile under xcodebuild for deployment target 7.0, but is fine for 6.0. Compiles for both under Xcode
我有一个 iOS 项目,其中 iOS 6.0 作为部署目标。它在 Xcode 和 xcodebuilder 下都能正常构建(CI 是必需的)。但是,客户现在希望该项目仅供安装了 iOS7+ 的用户使用。
没问题,我会增加部署目标数量,对吗?错了!
在 Xcode 下,项目继续正常编译。然而,在 xcodebuild 下,该项目无法编译并出现很多错误,如下所示:
Undefined symbols for architecture armv7:
"std::string::_Rep::_S_empty_rep_storage", referenced from:
in drmNativeInterface
它使用 Adobe Primetime
,drmNativeInterface
是其中的一部分。
为了帮助隔离问题,我创建了一个全新的单屏项目并进行了以下更改:
在Xcode、MediaPlayer
和[=16=中添加了构建项目所需的drmNativeInterface
框架和两个Apple提供的依赖项] 到 "Link Binary with Libraries"
。 Primetime 文档也列出了其他依赖项,但如果我添加这些依赖项没有任何区别 - 这些是在 Xcode.
下成功构建所需的唯一 2 个
用 "armv6 armv7 armv7s"
替换了有效的 archs "arm64 armv7 armv7s"
(即使 drmNativeInterface 显然包含 i386、x86_64、armv7s 和 arm64 切片,甚至 Xcode除非我将 arm64 切换为 armv6,否则不会编译项目。
将两种配置的 "Build Active Architecture Only"
设置为否。
最后,将 "-lstdc++ -ObjC -all_load"
添加到 "Other Linker Flags"
。
除了上面那几个步骤,项目是原厂单屏:没有添加任何代码。
Xcode 会编译它但 xcodebuild 不会。为了让 xcodebuild 编译它,我必须将部署目标切换到 6.0,这违背了客户的请求。
CI xcodebuild 命令包含一些参数,但这是我用于此测试项目的最小化命令:
xcodebuild -project "MyProject.xcodeproj"
-scheme "MyProject"
我尝试添加 FRAMEWORK_SEARCH_PATHS
、HEADER_SEARCH_PATHS
和 ALWAYS_SEARCH_USER_PATHS
参数,以防 xcodebuild 无法使用项目文件中包含的路径,但这没有任何区别。
如果我从项目中删除 drmNativeInterface
框架 - 单独留下 2 个基于 Apple 的依赖项 - 该项目可以很好地编译 Xcode 和 xcodebuild。但显然这不是解决方案,因为我需要那个框架!
有没有人知道可能导致此问题的原因或解决方法?
**注意:**
There are a lot of questions on SO where projects will build in Xcode and not in xcodebuilder, but I couldn't find any where a project will build in xcodebuilder just fine for one deployment target and not for another.
提前致谢。
链接 libstdc++ 库(在本例中,准确地说是 libstdc++6.dylib)解决了问题。
您在 Link Binary With Libraries
中失去了 libstdc++6.dylib
只需添加它:
我有一个 iOS 项目,其中 iOS 6.0 作为部署目标。它在 Xcode 和 xcodebuilder 下都能正常构建(CI 是必需的)。但是,客户现在希望该项目仅供安装了 iOS7+ 的用户使用。
没问题,我会增加部署目标数量,对吗?错了!
在 Xcode 下,项目继续正常编译。然而,在 xcodebuild 下,该项目无法编译并出现很多错误,如下所示:
Undefined symbols for architecture armv7:
"std::string::_Rep::_S_empty_rep_storage", referenced from: in drmNativeInterface
它使用 Adobe Primetime
,drmNativeInterface
是其中的一部分。
为了帮助隔离问题,我创建了一个全新的单屏项目并进行了以下更改:
在Xcode、
MediaPlayer
和[=16=中添加了构建项目所需的drmNativeInterface
框架和两个Apple提供的依赖项] 到"Link Binary with Libraries"
。 Primetime 文档也列出了其他依赖项,但如果我添加这些依赖项没有任何区别 - 这些是在 Xcode. 下成功构建所需的唯一 2 个
用
"armv6 armv7 armv7s"
替换了有效的 archs"arm64 armv7 armv7s"
(即使 drmNativeInterface 显然包含 i386、x86_64、armv7s 和 arm64 切片,甚至 Xcode除非我将 arm64 切换为 armv6,否则不会编译项目。将两种配置的
"Build Active Architecture Only"
设置为否。最后,将
"-lstdc++ -ObjC -all_load"
添加到"Other Linker Flags"
。
除了上面那几个步骤,项目是原厂单屏:没有添加任何代码。
Xcode 会编译它但 xcodebuild 不会。为了让 xcodebuild 编译它,我必须将部署目标切换到 6.0,这违背了客户的请求。
CI xcodebuild 命令包含一些参数,但这是我用于此测试项目的最小化命令:
xcodebuild -project
"MyProject.xcodeproj"
-scheme"MyProject"
我尝试添加 FRAMEWORK_SEARCH_PATHS
、HEADER_SEARCH_PATHS
和 ALWAYS_SEARCH_USER_PATHS
参数,以防 xcodebuild 无法使用项目文件中包含的路径,但这没有任何区别。
如果我从项目中删除 drmNativeInterface
框架 - 单独留下 2 个基于 Apple 的依赖项 - 该项目可以很好地编译 Xcode 和 xcodebuild。但显然这不是解决方案,因为我需要那个框架!
有没有人知道可能导致此问题的原因或解决方法?
**注意:**
There are a lot of questions on SO where projects will build in Xcode and not in xcodebuilder, but I couldn't find any where a project will build in xcodebuilder just fine for one deployment target and not for another.
提前致谢。
链接 libstdc++ 库(在本例中,准确地说是 libstdc++6.dylib)解决了问题。
您在 Link Binary With Libraries
中失去了 libstdc++6.dylib
只需添加它: