gpt4 book ai didi

c - 在 Swift 模块中使用 C 库的链接器架构错误

转载 作者:可可西里 更新时间:2023-11-01 02:18:16 27 4
gpt4 key购买 nike

我有一个具有以下结构的 xcode 工作区:

  • 编译成框架的C库iGLPK(动态还是静态,错误依旧)

  • 一个动态框架 SwiftyGLPK,它以 iGLPK 作为链接框架,并提供 Swift 包装器以使用 C 库

  • 一个以 SwiftyGLPK 作为链接框架的 xcode 项目 Frozen

  • 使用 SwiftyGLPK 库的代码位于 Frozen 项目中的单独框架目标 Model_GLPK 中。这个框架编译得很好。

当我在调用 Model_GLPK 的主 Frozen/ViewController 中编写代码时,问题就来了链接器错误:

Undefined symbols for architecture arm64:
"SwiftyGLPK.SolveGoal.Minimise (SwiftyGLPK.SolveGoal.Type) -> SwiftyGLPK.SolveGoal", referenced from:
Frozen.ViewController.viewDidLoad (Frozen.ViewController)() -> () in ViewController.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我在模拟器和设备上得到了相同的结果,只是未找到的架构发生了变化。

我还尝试从 Model_GLPK 框架中提取文件并将它们直接放入 Frozen 目标中。现在一切都可以正常编译并且不再有链接错误,但是我在运行时遇到了严重的崩溃

dyld`dyld_fatal_error:
-> 0x1200c1088 <+0>: brk #0x3

在这条指令之后:

dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*)

任何人都可以阐明正在发生的事情吗?

最佳答案

我找到了解决方案,但没有找到解释。

我又一步一步地建立了工作区,从直接在主项目中编译C库开始,然后将它提取到一个框架中,然后将它的Swift包装器提取到它自己的框架中,然后创建一个内部模块链接到包装器。

现在一切正常,但我仍然不知道为什么或与以前有什么不同。整个事情感觉真的很脆弱。 ¯_(ツ)_/¯

这篇文章 module maps for static libraries很有帮助,this one 也是如此.还有这个build settings reference .

关于c - 在 Swift 模块中使用 C 库的链接器架构错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34416835/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com