xcframework 使用时报 undefined symbol 的问题

2022-06-15 14:47:24 +08:00
 junho

用系统 framework 模板创建一个 A 静态 framework 工程,然后用 pod 引入 B 库依赖,接着通过 archive 和 xcodebuild 生成 A.xcframework 。

然后创建一个私有 Pod ,里面只依赖了上面生成的 A.xcframework(使用 vender_frameworks)

然后创建了一个 Demo 工程,通过 Pod 引入了上面的私有 Pod ( xcframework )和 B 库(源码),然后编译时就会报错,说找不到 A.xcframework 用到的 B 方法的符号。(pod 库都是静态的)。 但是我看 cocoapods 已经设置好 Demo 工程,例如 framework path 、modulemap path 等.

移除私有 Pod ( xcframework )只保留 B 库引用,直接跑是没问题的

不明白为啥会报这种错误。。。

4183 次点击
所在节点    iDev
6 条回复
junho
2022-06-15 14:52:22 +08:00
也会遇到其他问题,
例如 build 依赖了第三方库( pod 管理)的 xcframework 后,拿去工程用会包 no such module 和 can not load underlying module 之类的问题
头大
louiswang002
2022-06-15 22:19:37 +08:00
你要理解库之间的依赖原理,以及库与库之间是怎么链接的;换句话说就是 A 库的 framework search path 没包括 B 库所在的路径
junho
2022-06-16 08:50:27 +08:00
@louiswang002 #2
按我的理解,这是在 Demo 工程 link 阶段发生的错误,所有的 objectFile 都在一个可执行文件里,demo 工程能找到 B 库的 framework 就应该可以链接,应该跟 A 库有没有包括 B 库的路径没关系吧?
也确认了 Pods 的 Project 的 A 库私有库 target 的 framework search path 是包含了 B 库路径的(因为 podSepc 里写明了依赖 B 库)
请指点下“ A 库的 framework search path 没包括 B 库所在的路径”的具体方法
louiswang002
2022-06-16 09:30:35 +08:00
@junho 可以先尝试在 A 库的 wrapper 仓库的 podspec 里加上 B 的 dependency
junho
2022-06-16 10:04:42 +08:00
@louiswang002 #4
是的,目前 A 库的 wrapper 仓库的 popSpec 里是明确加上 B 的 dependency ,所以 cocoapods 自动在 A 库的 Build Setting 里的 framework search path 加上了 B 库的路径。
所以对于主楼的报错很是奇怪
louiswang002
2022-06-16 23:54:17 +08:00
@junho 可能是编译顺序问题导致的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/859776

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX