框架无法在 Xcode 10 中 link
Framework fails to link in Xcode 10
我的应用程序使用静态框架 "A"(作为依赖构建),它本身使用静态框架 "B"。在 Xcode 9 中,它构建并运行良好。在 Xcode 10 中,我得到 "Undefined symbols for architecture x86_64" 后跟从 "B" 中定义的 "A" 引用的符号列表。 "A" 中似乎存在符号定义,但数据中没有。 Xcode 9 包含 "A" 中的数据,但 Xcode 10 不包含。
使用 Xcode 9:
nm -m -arch x86_64 "A" | grep "<symbol from B>"
(undefined) external _<symbol from B>
0000000000000f20 (__DATA,__const) external _<symbol from B>
使用 Xcode 10:
nm -m -arch x86_64 "A" | grep "<symbol from B>"
(undefined) external _<symbol from B>
为什么这只在 Xcode 10 中失败?
2020 Xcode 12 编辑: 虽然原来的问题似乎已经解决,但如果图书馆 B 有一个 iOS部署目标低于库 A.
出于某种原因,Xcode 10 在创建静态库“A”时不会将“Link Binary with Libraries”中列出的项目传递给 libtool。这可能是一个错误,或者可能有一些逻辑,我会提交错误报告。解决方法是在“A”的构建设置中将以下内容添加到“其他图书馆员标志”:
"${BUILT_PRODUCTS_DIR}/B.framework/B"
我的应用程序使用静态框架 "A"(作为依赖构建),它本身使用静态框架 "B"。在 Xcode 9 中,它构建并运行良好。在 Xcode 10 中,我得到 "Undefined symbols for architecture x86_64" 后跟从 "B" 中定义的 "A" 引用的符号列表。 "A" 中似乎存在符号定义,但数据中没有。 Xcode 9 包含 "A" 中的数据,但 Xcode 10 不包含。
使用 Xcode 9:
nm -m -arch x86_64 "A" | grep "<symbol from B>"
(undefined) external _<symbol from B>
0000000000000f20 (__DATA,__const) external _<symbol from B>
使用 Xcode 10:
nm -m -arch x86_64 "A" | grep "<symbol from B>"
(undefined) external _<symbol from B>
为什么这只在 Xcode 10 中失败?
2020 Xcode 12 编辑: 虽然原来的问题似乎已经解决,但如果图书馆 B 有一个 iOS部署目标低于库 A.
出于某种原因,Xcode 10 在创建静态库“A”时不会将“Link Binary with Libraries”中列出的项目传递给 libtool。这可能是一个错误,或者可能有一些逻辑,我会提交错误报告。解决方法是在“A”的构建设置中将以下内容添加到“其他图书馆员标志”:
"${BUILT_PRODUCTS_DIR}/B.framework/B"