有一个项目有一个预先构建的依赖项(一堆静态库),所有这些库都有以默认工具链格式生成的调试信息部分- DWARF-4。我试图用-gdwarf-5编译我的源代码,但链接器无法链接最终可加载的二进制文件:
ld.lld: error: linking module flags 'Dwarf Version': IDs have conflicting values ('i32 4' from foo/bar/baz.cc with 'i32 5' from ld-temp.o)即使不同的TU使用不同的DWARF版本,有没有办法说服linker继续?经过一些谷歌搜索,我找到了这个票证https://reviews.llvm.org/D52952,其中同样的问题被报告为警告,这让我认为可能存在一些机会来抑制它。
备注:以上是来自Android NDK r20的LLVM工具链(声称是LLVM8),链接器是lld。
另外,我没有机会重新编译依赖项,这就是为什么我在寻找一种方法来允许在最终的二进制文件中使用不同的DWARF版本。
发布于 2019-10-31 06:21:07
NDK默认将-Wl,--fatal-warnings传递给链接器,因为最常见的链接器警告类型是未定义某些内容,这意味着您的应用程序已损坏。多年来,链接器中添加了更多警告,其中一些(我相信这里就是这种情况)相当无害。
不幸的是,据我所知,没有办法像使用编译器的-Werror=warning-name那样,在每个警告的基础上控制致命警告。如果您可以禁用所有致命的链接器警告,您可以使用-Wl,--no-fatal-warnings禁用该功能(将其添加到您的ldflag中)。如果您正在使用ndk-build,则可以使用LOCAL_DISABLE_FATAL_LINKER_WARNINGS := true在每个模块的基础上执行此操作。
https://stackoverflow.com/questions/58633287
复制相似问题