我通常在我的c / c ++程序中使用valgrind,但是人们一直在建议使用地址清理器,因此我想对其进行测试,但是在redhat系统上无法与它链接。
我得到了以下代码:
$ cat heap-use-after-free.cpp
int main(int argc, char **argv) {
int *array = new int[100];
delete [] array;
return array[argc]; // BOOM
}
像这样编译:
$ g ++ -O -g -fsanitize =地址堆使用后释放.cpp
/usr/bin/ld: cannot find /usr/lib64/libasan.so.0.0.0
collect2: error: ld returned 1 exit status
在我安装了libasan的Redhat上
sudo yum install libasan
[sudo] password for dingdongsong:
Loaded plugins: langpacks, product-id, rhnplugin, search-disabled-repos, subscription-manager
This system is receiving updates from RHN Classic or Red Hat Satellite.
rh-network-tools-rhel-x86_64-server-7-prod | 1.5 kB 00:00:00
rhel-x86_64-server-7-custom-prod | 1.0 kB 00:00:00
rhel-x86_64-server-7-epel-prod | 1.5 kB 00:00:00
rhel-x86_64-server-7-prod | 1.5 kB 00:00:00
rhel-x86_64-server-7-rhscl-1-prod | 1.5 kB 00:00:00
rhel-x86_64-server-7-thirdparty-oracle-java-prod | 1.5 kB 00:00:00
rhel-x86_64-server-extras-7-prod | 1.5 kB 00:00:00
rhel-x86_64-server-optional-7-prod | 1.5 kB 00:00:00
rhel-x86_64-server-supplementary-7-prod | 1.5 kB 00:00:00
Package libasan-4.9.2-6.2.el7.x86_64 already installed and latest version
Nothing to do
具有以下libasan共享对象:
$查找libasan
/opt/rh/devtoolset-7/root/usr/lib/gcc/x86_64-redhat-linux/7/32/libasan.a
/opt/rh/devtoolset-7/root/usr/lib/gcc/x86_64-redhat-linux/7/32/libasan.so
/opt/rh/devtoolset-7/root/usr/lib/gcc/x86_64-redhat-linux/7/32/libasan_preinit.o
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/libasan.so
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/libasan_preinit.o
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/32/libasan.a
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/32/libasan.so
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/32/libasan_preinit.o
/usr/lib64/libasan.so.1
/usr/lib64/libasan.so.1.0.0
有人能指出我正确的方向吗?
谢谢
答案 0 :(得分:0)
似乎正在寻找比您拥有的库更早的版本。尝试执行此操作,看看会显示什么内容:
sudo yum install /usr/lib64/libasan.so.0.0.0
还确定您的gcc-c++
软件包的版本是最新的吗?
我在一个有效的CentOS 7容器中拥有的libasan
软件包的版本是:libasan-4.8.5-36.el7_6.2.x86_64
。
答案 1 :(得分:0)
从/usr/lib64/libasan.so.1.0.0到/usr/lib64/libasan.so.0.0.0的软链接应该可以解决问题:
ln -s from /usr/lib64/libasan.so.1.0.0 /usr/lib64/libasan.so.0.0.0
答案 2 :(得分:0)
我最近在使用gcc 4.8.5的CentOS 7系统上遇到了同样的问题。我在https://rpmfind.net/linux/RPM/centos/7.7.1908/x86_64/Packages/libasan-4.8.5-39.el7.x86_64.html找到了一个rpm,并能够启动它并运行它。