在Redhat上,/usr/bin/ld找不到/usr/lib64/libasan.so.0.0.0。

6

我通常在我的C/C++程序中使用valgrind,但人们一直推荐地址泄漏检测器(ASan),所以我想测试一下它,但我在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=address heap-use-after-free.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共享对象的内容:

$ locate 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

有人能给我指点一下方向吗。

谢谢


我刚刚在CentOS 7的Docker容器中测试过,对我来说完全没问题。 - Omnifarious
3个回答

4

3

看起来它正在寻找一个比你拥有的库更早的版本。尝试执行以下操作并查看其显示内容:

最初的回答:

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接