Как создать общую библиотеку с очистителем памяти с помощью 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 файл с дезинфицирующим средством памяти?

0 ответов

Другие вопросы по тегам