当前位置: 首页>>技术教程>>正文


ubuntu – 为什么ASAN_SYMBOLIZER_PATH不再与版本修饰的二进制文件一起使用

, , ,

问题描述

在Ubuntu 14.10上,llvm-symbolizer程序安装为/usr/bin/llvm-symbolizer-3.5。通常,地址清理器要在PATH中找到一个名为llvm-symbolizer的二进制文件。但是,作为一种解决方法,可以显式设置ASAN_SYMBOLIZER_PATH。因此,在环境中设置ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.5将使地址消毒程序检测程序打印符号错误。

在Ubuntu 16.04上,再次安装了llvm-symbolizer程序,其版本后缀为/usr/bin/llvm-symbolizer-3.8。但是,ASAN_SYMBOLIZER_PATH设置似乎不再起作用。当ASAN检测到错误时,在环境中设置了ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.8的情况下运行ASAN检测的程序会产生以下错误:

==18718==ERROR: External symbolizer path is set to '/usr/bin/llvm-symbolizer-3.8' which isn't a known symbolizer. Please set the path to the llvm-symbolizer binary or other known tool.

有谁知道为什么这种行为改变了,或者如何恢复旧的行为?这似乎是不合理的限制。我已将ASAN指向的符号程序绝对是已知的符号程序,它恰好在末尾具有Ubuntu强制版本标记。

请注意,在这里调整PATH无济于事,因为Ubuntu并未随附没有版本装饰的llvm-symbolizer二进制文件。

最佳回答

事实证明,在Ubuntu的LLVM打包程序中,可以从路径/usr/lib/llvm-3.x/bin获得未经修饰的llvm-symbolizer二进制文件,因此PATH=/usr/lib/llvm-3.x/bin:$PATH [COMMAND]可以完成此任务。我仍然认为,尽管此更改是对editor_rt的回归。

次佳回答

下列

sudo ln -s /usr/bin/llvm-symbolizer-3.8 /usr/bin/llvm-symbolizer

也适用于llvm-symbolizer-4.0

(复制自@Eraden评论)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9832.html,未经允许,请勿转载。