提问人:Sazzad Hissain Khan 提问时间:10/1/2020 最后编辑:Sazzad Hissain Khan 更新时间:1/31/2021 访问量:8848
Xcode12 - 为 iOS 模拟器构建,但链接为 macOS 构建的目标文件,用于架构x86_64的文件“dir/SomeFile.a”
Xcode12 - building for iOS Simulator, but linking in object file built for macOS, file 'dir/SomeFile.a' for architecture x86_64
问:
当我尝试构建我的大型 iOS 应用程序(混合、swift+objc)时出现链接器错误。该应用程序为真实设备构建良好,但是当我尝试直接使用调试配置在模拟器中运行时,它给出了链接器错误。Xcode 12
我已经在这里的其他帖子中尝试了所有可能的解决方案,但不幸的是它没有奏效。虽然其他帖子中的错误是不同的。我已经检查了 Debug 配置的 YES 和 Release 配置的 NO。Build for active architectures only
其他过载错误,
为 iOS 模拟器构建,但链接为 iOS 构建的目标文件,用于架构 arm64
我的错误,
为 iOS 模拟器构建,但链接为 macOS 构建的目标文件、用于架构的文件x86_64
如何解决此问题?我需要在iOS真实设备和模拟器中运行。
答:
4赞
Eugene Dudnyk
1/13/2021
#1
无论您在哪里获得库,都应该请求为 iOS 模拟器编译的库,而不是为 macOS 编译的库,尽管它们具有通过 返回的相同二进制体系结构。lipo -info <file>
您可以使用以下命令验证静态 (.a) 或动态库 (.dylib) 是否已针对 iOS 模拟器进行编译:
otool -l <path-to-library> | grep platform
输出含义如下:
platform 7
- iOS模拟器platform 6
- Mac 催化剂platform 4
- watchOS 操作系统platform 2
- iOS系统platform 1
- macOS操作系统
以下是 的枚举的完整定义。platform
评论
0赞
Ramin
1/30/2021
这样做我什么也得不到,这意味着什么?我正在使用的胖二进制文件应该针对 iOS 模拟器和 macOS 进行编译,这就是我想为什么我有同样的错误,但我没有从运行这个 otool 命令中得到 ant 结果
0赞
Eugene Dudnyk
1/31/2021
你所指的胖二进制文件是否位于框架内?如果是这样,则该部分不存在于二进制文件中,并且其中的信息位于框架的 Info.plist 中。cmd LC_BUILD_VERSION
0赞
Ramin
2/1/2021
不,它不在框架中,只是两个以旧方式创建的 .a 文件。二进制文件的原始制作者显然太忙了,两年后无法创建一个新的二进制文件,同时将其出售给人们!
0赞
Eugene Dudnyk
2/12/2021
@Ramin,它可能是使用未在二进制文件中指定此信息的旧 clang 版本编译的。而较新的版本正在链接过程中寻找它。您可以尝试做的是通过一些十六进制编辑器自行将此信息添加到二进制文件中。我想不出其他解决方案来解决您的情况。
1赞
Deeksha gupta
1/13/2021
#2
评论
Build for active architectures only
Build Settings
Build for active architectures only
YES
NO
lipo