【问题标题】:Build a c-shared dylib from golang for iOS (armv7/arm64)从 golang for iOS (armv7/arm64) 构建一个 c-shared dylib
【发布时间】:2020-09-13 02:14:26
【问题描述】:

有没有办法从 go 代码构建动态库(dylib)?我为 x86_64 和 i386 完成了它,但对于 arm64 和 armv7(s),它说“darwin/arm 不支持 buildmode=c-shared”。为什么? 或者有没有办法将静态 a-library 文件转换为动态链接的 Mach-O dylib? 我可以使用 lipo 将 dylib 和 a 文件合并到一个通用二进制文件中,但这仍然将它们保留为静态存档。

我确信必须有一个命令可以将静态存档转换为动态 Mach-O 库。任何帮助表示赞赏,谢谢!

【问题讨论】:

  • 这能回答你的问题吗? Convert .a to .dylib in Mac osx
  • 同样的概念适用于iOS,只需使用xcrun -sdk iphoneos clang -arch arm64 [rest of flags]
  • 这是一个很好的开始ooint,谢谢@Siguza - 但我因缺少这样的符号而出错:架构arm64的未定义符号:“_CFBundleCopyResourceURL”,引用自:storj_uplink.a中的_init_working_dir(000021 .o) "_CFBundleGetMainBundle",引用自:storj_uplink.a(000021.o)中的_init_working_dir
  • 啊,明白了!必须添加 -Framework CoreFoundation。谢谢@Siguza!
  • 当我按照这些说明编译 Storj uplink-c SDK 时,出现运行时错误:libuplinkc.dylib`golang.org/x/sys/cpu.getisar0: -> 0x104d7b110 : mrs x0, ID_AA64ISAR0_EL1 0x104d7b114 : str x0, [sp, #0x8] 0x104d7b118 : ret 0x104d7b11c : udf #0x0 有人遇到过这个吗?在github.com/storj-thirdparty/uplink-swift/issues/5上有更详细的描述

标签: ios macos archive shared dylib


【解决方案1】:

@Siguza 给了我正确的提示。这是将我的静态存档转换为 iO 的动态库的最终方法 - 至少对于 arm64。我为 armv7 尝试了相同的方法,但这会导致其他问题,因此我决定将 32 位留在这里。

xcrun -sdk iphoneos clang -arch armv7 -fpic -shared -Wl,-all_load libmystatic.a -framework Corefoundation -o libmydynamic.dylib

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-12
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2014-05-10
    相关资源
    最近更新 更多