问题标签 [lipo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - iOS - 静态库框架大小相对于动态嵌入式框架非常大
我使用以下教程https://github.com/jverkoey/iOS-Framework创建了一个静态库(框架) 。
框架的大小是巨大的 - 大约 220 MB。
相反,当我创建一个动态嵌入式框架时,大小仅为~12MB。
需要注意的是,该框架是作为二进制文件分发的。
部分代码是用 c++ 和 objc++ 编写的。
两个项目中的链接器标志是相同的:
OTHER_LDFLAGS = $(继承) -ObjC -l"c++"
是什么导致了这种巨大的尺寸差异?如何将静态库的大小减小到与嵌入式动态库相同?
ios - 使用 lipo 将 iOS .dylib 合并到框架中会破坏位码重新编译
我正在尝试从.dylib
文件手动构建动态 iOS 框架。二进制文件是使用 cmake 和 xcodebuild 创建的,并生成两个文件.dylib
,一个包含,armv7
另一个包含架构。库被编译,一切都成功了。armv7s
arm64
x86_64
i386
-fembed-bitcode parameter
.dylib 文件然后与下一个命令合并:
然后通过将 lipo 命令的输出复制到以下位置来创建框架:
标头和Info.plist
手动生成并添加到框架中。
然后通过 CocoaPods 将该框架作为vendored_framework
. 众所周知,CocoaPods 将从任何胖二进制文件中剥离 i386/x86_64 库,用于 App Store 分发。
应用程序构建、运行、归档并成功上传到 App Store。
但是,由于启用了 Bitcode,App Store 将处理 .ipa,并使用 bitcode 重新编译,这就是它失败的地方,我收到了来自 App Store 的电子邮件,它处理失败。按照说明,我可以使用 Exporting for Ad-Hoc Distribution 和重新编译 bitcode 在本地重现错误。我收到的错误是这样的:
所以显然在重新编译期间,仍然有一个引用或某个地方lib_arm.dylib
,即使它被合并到一个胖 dylib Mach-O 通用二进制文件中(file
下面合并的 dylib 二进制文件的输出):
这几乎是我的编译器/链接器知识超出范围的地方。所以我的问题是:
我哪里错了?也许位码应该以不同的方式编译?或者也许我lipo
以错误的方式使用?
谢谢!
ios - iOS 胖二进制文件和稀疏化
我有一个应用程序在使用文件时报告它在 Mach-O 中有 2 个架构
编辑 - 我也用 Xcode 的工具检查了这个
当我使用 otool 定位架构时,我可以看到我有 2 个,一个 ARMv7(cpusubtype 9)和一个 ARM64(cpysubtype 0)
但是,当我尝试使用 lipo 精简二进制文件时,出现以下错误
有什么想法为什么我想不出这个特定的二进制文件?当与 armv7 一起使用时,我确实更新了我的 lipo 二进制文件,说:没有这种类型的架构。
ios - Fail to run 'lipo', Lib have the same architectures
I try to build static framework.
So I run following commands:
for device
for simulator
However when I try to run lipo
:
I get an error:
fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: build/Release-iphonesimulator/MyAppLib.framework/MyAppLib and build/Release-iphoneos/MyAppLib.framework/MyAppLib have the same architectures (i386) and can't be in the same fat output file
From Xcode I success to build it but from CLI both have the same structure.
$ file MyAppLib.framework
gives me:
If I try to run only for one platform, the build is succeeded but I get strange framework that I cannot even explore it:
Edit:
Multiplatform script:
objective-c - 错误 ITMS-90085:“二进制文件中没有架构。Lipo 未能检测到捆绑可执行文件中的任何架构。” 上传错误
我使用 relatedSDK 进行 Firebase 集成,在上传 App 时遇到此错误。
错误 ITMS-90085:“二进制文件中没有架构。Lipo 未能检测到捆绑可执行文件中的任何架构。” 错误 ITMS-90085:“二进制文件中没有架构。Lipo 未能检测到捆绑可执行文件中的任何架构。”
ios - 编译器会从产品二进制文件中的依赖静态库中删除不相关的拱符号吗?
我是框架开发的新手,这是我的情况。我构建了一个私有静态库,将其提供给供应商以链接它。
目前,我仅使用 arch armv7 和 arm64 构建我的库,这应该适用于供应商在 iOS 设备中调试它并归档他们的应用程序,但不适用于在 iOS 模拟器中调试。模拟器需要 x86_64(甚至 iPhone 5 模拟器中的 i386)。禁用在模拟器中调试它的能力是不友好的。我正在考虑为他们提供一个静态库的胖架构。
这是动作
合并操作后,输出库的大小是单个库的两倍。
问题是,编译器/Xcode 会从最终的应用产品二进制文件中去除 i386 和 x86_64 拱符号吗?如果没有,fat arch 库会直接增加产品应用的大小,对吧?我应该为供应商构建两个版本的库,一个用于调试,另一个用于存档?这种情况的正确解决方案是什么?
我不知道我应该研究什么关键字,我也没有现有的产品应用程序链接它来验证这一点。(也许我应该稍后再建一个。)
ios - 在命令行上将静态 iOS 库打包在一起
我有一个为 armv7 和 arm64 构建的静态 iOS 库,我们称之为 foo.a。它依赖于我在 armv7 和 arm64 版本中的 abc.a 和 def.a。我想将它们打包到一个静态库中,因此您可以只使用 foo.a 而不必在项目中包含 abc.a 和 def.a。
简而言之,我想做一些类似于
但我不知道我应该使用哪个工具,或者我是否使用错误。我已经尝试过 libtool,例如:
但我收到错误消息
我试过脂
但我收到错误消息
我一定误解了这个过程的基本原理,但我很难找出什么
ios - 将静态库(protobuf .a)上传为 cocoapod
我似乎无法理解如何将静态库和公共标头作为 cocoapod 上传。我想要实现的是,通过安装这个 pod,它会拉取 .a 文件和一些标题并将其与我的 .xcodeproj 链接。
- 我为所有架构构建了一个 protobuf,并用 lipo 制作了一个通用库。
- 我将标题和 .a 文件放入文件夹,将其压缩并上传到存储中,并通过公共链接访问。
当我这样做pod lib lint Protobuf.podspec --verbose
时输出:
不幸的是,我对 pod 没有任何经验。也许有人会指出我正确的方向?
ios - xcode iOS CreateUniversalBinary 失败:文件太大,无法创建为胖文件
我最近在我的 iOS 静态库项目中添加了相当多的代码。我总是创建支持所有平台(从 iPhone4S 到当前 iPhone7)的通用二进制文件,但在添加代码(增加 .a 大小)后会导致:
CreateUniversalBinary 失败:文件太大而无法创建为 fat 文件,因为 struct fat_arch 中归档的大小仅为 32 位,并且架构 armv7 的大小超过了
我做了很多谷歌搜索,但没有多少人在创建大型静态库(大小为 2Gb)。到目前为止,Apple 网站上只有一个相关的错误报告:Lipo max input file size is limited
但我不明白 OP 如何lipo
以 100Mb 的增量修补输出。lipo -help
并且文档没有透露太多信息。
这是我的设置:
有没有人遇到过同样的问题和/或知道如何处理/解决它?
任何方向都最受欢迎..
提前致谢
objective-c - 如何将 armv7 二进制文件转换为 i386/x86_64
我正在尝试构建一个 mac(cocoa) 应用程序。我有一个我正在尝试链接的框架,该框架已经为 iOS(armv7 架构)编译。不幸的是,我不再拥有用于编译原始框架的源代码。是否可以更改框架的架构(可能通过反编译然后重新编译)以便可以将其编译到我的可可应用程序中?
到目前为止,我已经研究了 lipo 和 fat 二进制文件以及使用 opttool 进行反编译,但在转换架构方面没有取得任何直接进展。
谢谢你的帮助。