Как создать общую библиотеку с очистителем памяти с помощью clang++?
Я использовал clang-10 с ubuntu 18.04.
Я пытаюсь создать общую библиотеку с очистителем памяти.
#include <stdio.h>
int foo(int argc, char** argv) {
int* a = new int[10];
a[5] = 0;
if (a[argc])
printf("xx\n");
return 0;
}
Объект построен с:
clang++ -c foo.cpp -o foo.o -fsanitize=memory -fPIC
А потом я пытаюсь связать его с общей библиотекой:
clang++ -Wl,--no-undefined -shared -Wl,-soname,libFoo.so -o libFoo.so foo.o
После этой команды я получил сообщение об ошибке:
foo.o: In function `foo(int, char**)':
foo.cpp:(.text+0xf): undefined reference to `__msan_param_tls'
foo.cpp:(.text+0x68): undefined reference to `__msan_retval_tls'
foo.cpp:(.text+0xc9): undefined reference to `__msan_warning_noreturn'
foo.cpp:(.text+0x126): undefined reference to `__msan_warning_noreturn'
foo.cpp:(.text+0x168): undefined reference to `__msan_warning_noreturn'
foo.cpp:(.text+0x17f): undefined reference to `__msan_param_tls'
foo.cpp:(.text+0x18e): undefined reference to `__msan_va_arg_overflow_size_tls'
foo.cpp:(.text+0x19d): undefined reference to `__msan_retval_tls'
foo.cpp:(.text+0x1bb): undefined reference to `__msan_retval_tls'
foo.o: In function `msan.module_ctor':
foo.cpp:(.text+0x1d2): undefined reference to `__msan_init'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Какую правильную команду строить
.so
файл с дезинфицирующим средством памяти?