在Ubuntu 14.10上,
在Ubuntu 16.04上,
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
二进制文件。
sudo ln -s /usr/bin/llvm-symbolizer-3.8 /usr/bin/llvm-symbolizer
。 - Eraden