0

我有一个应该在各种平台上运行的应用程序,即 ARM、i386、amd64 等。我想检查任何可能的内存泄漏,我在 GCC 中启用了地址清理器,因为 -fsanitize=address 我们正在使用 buildroot 编译整个 OS+应用程序。为了确保每个开发者都安装了相同版本的库,我们将所有需要的动态库打包到ProjectX/lib path 中,并将其设置为 LD_LIBRARY_PATH。如果地址清理程序关闭,一切正常。在使用 address-sanitizer 编译并运行应用程序时

/lib/i386-linux-gnu/libm.so.6: version `GLIBC_2.23' not found (required   by BUILD/host_shared_0_1/host/usr/i686-buildroot-linux-gnu/lib/libasan.so.1)

`GLIBC_2.23' 已经存在,但打包在 $ProjectX/lib 下 但是,libasan 在 /lib/i386-linux-gnu/ 下查找它,并在找到不兼容的版本时抛出错误。

QS:我如何指示 libasan 在LD_LIBRARY_PATHonly 指定的路径中查找所需的库。

4

1 回答 1

0

似乎您的 buildroot 和实际运行时环境是二进制不兼容的,即 libasan 需要比环境中安装的版本更新的 libm 版本。这本身不是 Asan 的问题,二进制不兼容也可能会导致其他软件出现问题。有关详细信息,请谷歌搜索“未找到版本 GLIBC_2.23”。

我如何指示 libasan 仅在 LD_LIBRARY_PATH 指定的路径中查找所需的库。

这就是它现在所做的。

于 2016-10-24T09:57:41.660 回答