我已经使用 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 可用于 go build,但仅适用于主包,也不适用于 gomobile 绑定。