Enabling Address Sanitizer for OpenCV builds

asked 2020-07-23 09:29:44 -0600

Will gravatar image

Is there a way to enable Address Sanitizer for OpenCV builds?

I've tried adding OPENCV_EXTRA_CXX_FLAGS="-fsanitize=address"; however, I receive configuration errors claiming:

Compiler doesn't support baseline optimization flags

I've also tried adding custom build configs like the below:

# AddressSanitize
set(CMAKE_C_FLAGS_ASAN
    "-fsanitize=address -g -O1"
    CACHE STRING "Flags used by the C compiler during AddressSanitizer builds."
    FORCE)
set(CMAKE_CXX_FLAGS_ASAN
    "-fsanitize=address -g -O1"
    CACHE STRING "Flags used by the C++ compiler during AddressSanitizer builds."
    FORCE)

This makes it further, but upon linking libopencv_core.so I get the following error:

`_ZZN2cv10AutoBufferIiLm4EEixEmE19__PRETTY_FUNCTION__' referenced in section `.data.rel.local..LASAN0' of CMakeFiles/opencv_core.dir/src/umatrix.cpp.o: defined in discarded section `.rodata._ZZN2cv10AutoBufferIiLm4EEixEmE19__PRETTY_FUNC
TION__[_ZZN2cv10AutoBufferIiLm4EEixEmE15__cv_check__137]' of CMakeFiles/opencv_core.dir/src/umatrix.cpp.o
`_ZZN2cv10AutoBufferINS_5RangeELm136EEixEmE19__PRETTY_FUNCTION__' referenced in section `.data.rel.local..LASAN0' of CMakeFiles/opencv_core.dir/src/umatrix.cpp.o: defined in discarded section `.rodata._ZZN2cv10AutoBufferINS_5RangeELm136
EEixEmE19__PRETTY_FUNCTION__[_ZZN2cv10AutoBufferINS_5RangeELm136EEixEmE15__cv_check__137]' of CMakeFiles/opencv_core.dir/src/umatrix.cpp.o
collect2: error: ld returned 1 exit status
modules/core/CMakeFiles/opencv_core.dir/build.make:1614: recipe for target 'lib/libopencv_core.so.3.4.10' failed
make[2]: *** [lib/libopencv_core.so.3.4.10] Error 1
CMakeFiles/Makefile2:2258: recipe for target 'modules/core/CMakeFiles/opencv_core.dir/all' failed
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2

Thanks for your time!

edit retag flag offensive close merge delete