Следующий пример кода скомпилирован с последующим вводом командной строки
#include <pthread.h>
#include <stdio.h>
#include <string>
#include <map>
typedef std::map<std::string, std::string> map_t;
void *threadfunc(void *p) {
map_t& m = *(map_t*)p;
m["foo"] = "bar";
return 0;
}
int main() {
map_t m;
pthread_t t;
pthread_create(&t, 0, threadfunc, &m);
printf("foo=%s\n", m["foo"].c_str());
pthread_join(t, 0);
}
Ввод командной строки:
g++ thread.cpp -fsanitize=thread -fPIE -pie -lpie -g
Хорошо компилируется, но при запуске кода возникают ошибки времени выполнения.
FATAL: ThreadSanitizer can not mmap the shadow memory (something is mapped at 0x56167ae3b000 < 0x7cf000000000)
FATAL: Make sure to compile with -fPIE and to link with -pie.
Я запускаю это с версией g ++, которая имеет fSanitize, поэтому я не уверен, где источник проблемы?
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28)