如在编译或.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命令是否有问题?
是:要正常工作,请给消毒液处理地址[[必须拦截每个调用malloc
。因此,您无法使用-fsanitize=address
来检测共享库,而无法将该库加载到本身已未进行检测的主可执行文件中。
创建的库文件'libsynsv.so'本身不将'asan'库显示为与ldd libsynsv.so输出的依赖关系。
正如@yugr在评论中所说,链接共享库时,-static-libasan
被忽略。
为什么我用-fsanitize-address运行时为什么我的库没有链接到asan。
因为将运行时链接到共享库不足以使地址清理器正常工作。