-fsanitize = address,-static-libasan,看不到asa与最终.so文件链接的libray

问题描述 投票:0回答:1

如在编译或.so文件创建过程中使用-fsanitize = address所述,将自动链接libasan.so库,对吗?

我面临问题:-

==13640==ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD.
xrun: *E,ELBERR: Error during elaboration (status 1), exiting.

我发现了相同的问题,并在这里解决了相同的问题:-https://github.com/google/sanitizers/issues/796

首先,我尝试将-fsanitize=address ,-static-libasan标志用于我的gcc编译器,并使用链接器创建的.so文件。创建的库文件'libsynsv.so'本身不显示'asan'库作为其与ldd libsynsv.so输出的依存关系。

/ folder / san / client / src / main / cvip / asan / Release / verilog /../ lib / libviputil.so:未定义的符号:__asan_option_detect_stack_use_after_return。

我的GCC命令有问题吗?为什么我使用-fsanitize-address运行时为什么我的库没有链接到asan。

gcc gnu-make address-sanitizer
1个回答
0
投票

我的GCC命令是否有问题?

是:要正常工作,请给消毒液处理地址[[必须拦截每个调用malloc。因此,您无法使用-fsanitize=address来检测共享库,而无法将该库加载到本身已进行检测的主可执行文件中。

创建的库文件'libsynsv.so'本身不将'asan'库显示为与ldd libsynsv.so输出的依赖关系。

正如@yugr在评论中所说,链接共享库时,-static-libasan被忽略。

为什么我用-fsanitize-address运行时为什么我的库没有链接到asan。

因为将运行时链接到共享库不足以使地址清理器正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.