【问题标题】:Gomobile bind producing library with "PIE disabled" / i386 archGomobile 绑定生成库与“PIE 禁用”/i386 拱
【发布时间】:2018-04-25 13:51:04
【问题描述】:

我已经使用 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 绑定命令,但我假设它更多的是编译问题。我知道有 -buildmode=pie 可用于 go build,但仅适用于主包,也不适用于 gomobile 绑定。

【问题讨论】:

    标签: ios go clang cocoapods gomobile


    【解决方案1】:

    显然这修复(抑制)错误:

    spec.pod_target_xcconfig = {
        "OTHER_LDFLAGS[arch=i386]" => "-Wl,-read_only_relocs,suppress"
    }
    

    我仍然收到 PIE 警告,但错误消失了,Pod 已推送到存储库。

    我想知道苹果在推送到 App Store 时是否会因为缺少二进制 PIE 而感到不满?

    【讨论】:

      猜你喜欢
      • 2017-06-23
      • 2019-04-06
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 2012-06-17
      • 2012-10-22
      相关资源
      最近更新 更多