Xcode 14.3中geth.framework链接报错__TEXT/__text地址越界求助
问题描述
此前在Xcode 13.3环境下geth.framework可正常工作,升级至Xcode 14.3后,编译时出现以下链接错误:
in /Users/Live Project/Brewary App/Pods/Geth/Frameworks/Geth.framework/Geth(go.o), section __TEXT/__text address out of range file '/Users/Live Project/Brewary App/Pods/Geth/Frameworks/Geth.framework/Geth' for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决思路
更新geth.framework至适配Xcode 14的版本
旧版本的geth.framework未针对Xcode 14.3的链接器规则做优化,可直接获取官方最新预编译框架,或自行从源码编译适配新版本Xcode的版本,编译时注意指定对应架构与Xcode工具链。添加链接器参数兼容Go二进制
在项目Build Settings中找到Other Linker Flags,添加-Wl,-no_new_main参数,该参数可解决Go编译生成的二进制在新Xcode链接器下的地址范围问题。排除x86_64架构(真机场景适用)
若项目无需在x86_64模拟器运行,可在Build Settings的Excluded Architectures中,为Debug/Release模式添加x86_64,强制仅编译arm64架构绕过错误。注意:需要模拟器调试时不适用此方法。清理缓存后重新构建
按以下步骤清理缓存:- 用
Cmd + Shift + K清理Xcode项目缓存 - 删除
~/Library/Developer/Xcode/DerivedData下对应项目的文件夹 - 执行
pod install重新拉取依赖,再重新编译项目
- 用
重置Pod依赖配置
删除项目中的Podfile.lock文件和Pods目录,重新执行pod install拉取最新依赖,避免旧版本框架缓存残留。
内容的提问来源于stack exchange,提问作者ghanshyam antala

