# go升级到1.21版本gomobile编译报错:Undefined symbols

3 min read
文章目录

前言

之前把gopeed项目升级到go1.21版本后,发现gomobile编译完后,在 flutter ios 端编译会报错,如下:

Terminal window
ld: Undefined symbols:
_res_9_nclose, referenced from:
_runtime.text in Libgopeed[arm64][2](go.o)
_res_9_ninit, referenced from:
_runtime.text in Libgopeed[arm64][2](go.o)
_res_9_nsearch, referenced from:
_runtime.text in Libgopeed[arm64][2](go.o)
clang: error: linker command failed with exit code 1 (use -v to see invocation)

然后我在gogithub里找到了这个issue,但是看到这个@bcmills哥们的回复感觉太麻烦了就用了后面@dreacot老哥的解决方案,编译的时候加上-tags netgo

Terminal window
gomobile bind -target=ios -tags netgo

然后就可以正常编译了,因为我自己没有ios设备,就没有测试过,按理说编译通过了应该就没问题了,然而最近 github 上好多用户都在反馈 ios 端无法正常使用,附上一个issue,看起来都是DNS解析的问题,起初以为是用户的网络问题,但是随着越来越多的用户反馈,这肯定就不是单纯的用个例问题了,于是又重新开始研究@bcmills哥们的解决方案。

添加 libresolv.tbd 库

他提到的解决方案是通过添加libresolv.tbd或者libresolv.9.tbd库来解决,但是很尴尬的是我没有mac设备,所以没办法在 xcode 里添加这个库,于是问了下无所不知的ChatGPT,看看能不能通过命令行添加这个库:

看起来好像可行,在github action中跑了下,然后顺便把生成出来的project.pbxproj文件打印出来,如果没问题的话就复制出来提交,脚本如下:

Terminal window
gem install xcodeproj
cat <<EOF > temp.rb
require 'xcodeproj'
project_path = 'ui/flutter/ios/Runner.xcodeproj'
project = Xcodeproj::Project.open(project_path)
target = project.targets.first
# 添加系统库
lib_name = 'libresolv.tbd'
framework = 'usr/lib/' + lib_name
target.frameworks_build_phase.add_file_reference(project.frameworks_group.new_file(framework))
project.save
EOF
ruby temp.rb
echo "==========edit project.pbxproj============"
cat ui/flutter/ios/Runner.xcodeproj/project.pbxproj
echo "==========edit project.pbxproj============"

接着就是等待github action的结果了,结果是编译成功的,然后把IPA包发给用户测试,一切正常,问题解决,最后把更新之后的project.pbxproj文件提交到github上,至此一个没有mac设备的我就这样把这个问题解决了,哈哈,不得不说我可真是个天才(狗头保命)。


More Posts

# github action 支持 macOS arm 架构了

2 min read

之前苦于github action不支持macOS arm架构,导致我为了打gopped macos包煞费苦心,我在 linux 上用xgo交叉编译出来macos arm64的动态库,然后在macOS x64上再打包成macos amd64的动态库,最后把两个架构的动态库合并成一个universal binary包,来同时支持Intel和Apple Silicon架构,如今github…

阅读

# js模拟键盘输入

6 min read

最近发现了一个沉浸式翻译的神奇功能,就是在输入框输入中文的时候敲三下空格就可以自动翻译成英文,这功能真的挺方便的,效果如下图:

阅读

评论区