使用 ios_framework 规则创建动态框架后,一些导出的符号会消失

Some exported symbols disappear after creating a dynamic framework with the ios_framework rule

我在尝试使用 Bazel 构建混合语言动态 iOS 框架时遇到了一个很奇怪的情况。

框架源码由*.c、*.cpp、*.m、*.mm、*.h、*.hpp文件组成。

我的第一个幼稚尝试是声明一个引用所有来源的单一 objc_library 规则。那失败了,一条错误消息读取了有关冲突规则的内容。然后我分别为 *.m、*.mm、*.c 和 *.cpp 文件声明了四个不同的 objc_library 规则,然后引​​用所有这四个规则作为最终 ios_framework 规则的依赖项。

至此,一切都编译和链接正常(除了一些预期的编译器警告)。然而,黑魔法开始了:

我相信我仔细检查了用于编译和链接的命令行,包括 Bazel 和 xcodebuild。

我能发现的唯一异常情况:

但我不确定在调用链接器时是否真的需要这些标志。

我必须承认我 运行 除了尝试修补 CROSSTOOl 文件以使其行为尽可能接近 xcodebuild 之外,我没有其他想法。

请帮忙

您可以尝试将 alwayslink = 1 添加到包含 C++ 符号的 objc_library 目标吗?链接器正在删除 C++ 符号,因为它们没有在二进制文件中的任何地方被引用。