我已经使用gomobile绑定工具构建了我的Go库,以便在iOS应用中使用。我把我的图书馆包装成了Cocoapods .podspec。它在模拟器中很好地工作(通过本地开发pod),但是当我尝试pod lib lint
时(部分步骤,释放cocoapod的一部分)我遇到了错误:
错误:
ld: illegal text-relocation to 'runtime.rodata' in /Users/matti/src/foobar-sdk-ios/Frameworks/Client.framework/Client(go.o) from 'sync/atomic.(*Value).Store' in /Users/matti/src/foobar-sdk-ios/Frameworks/Client.framework/Client(go.o) for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
警告:
- NOTE | [iOS] [FooBarSDK/Go] xcodebuild: ld: warning: PIE disabled. Absolute addressing (perhaps -mdynamic-no-pic) not allowed in code signed PIE, but used in sync/atomic.(*Value).Store from /Users/matti/src/foobar-sdk-ios/Frameworks/Client.framework/Client(go.o). To fix this warning, don't compile with -mdynamic-no-pic or link with -Wl,-no_pie
似乎链接其他架构。我无法弄清楚如何跳过i386 - 即使我覆盖了VALID_ARCHS - 我想它无论如何都不是正确的解决方案。
所以相反我想知道如何用我的Go代码构建一个合适的二进制文件 - 我尝试将-ldflags =“ - extldflags = -pie”提供给gomobile bind命令,但我假设它更多的是编译问题。我知道-buildmode = pie可用于构建,但仅适用于主程序包,也不适用于gomobile bind。
答案 0 :(得分:0)
显然这可以修复(抑制)错误:
spec.pod_target_xcconfig = {
"OTHER_LDFLAGS[arch=i386]" => "-Wl,-read_only_relocs,suppress"
}
我仍然收到PIE警告但是错误消失了,并且pod被推送到存储库ok。
我想知道Apple在推送到App Store时是否会厌倦二进制缺失PIE?