ffmpeg下编译tsan
如何在ffmpeg下编译tsan,如下配置:
./configure \--prefix=/workspace/ffmpeg_gcu \--disable-stripping \--disable-optimizations \--disable-x86asm \--toolchain=gcc-tsan \--enable-pic \--enable-swscale \--enable-static \--enable-shared
结果出现下面错误,提示找不到libtsan_preinit.o:
BEGIN /tmp/ffconf.l64ruLdY/test.c1 int main(void){ return 0; }
END /tmp/ffconf.l64ruLdY/test.c
gcc -fsanitize=thread -fPIC -g0 -O3 -DNDEBUG -Wl,--build-id -c -o /tmp/ffconf.l64ruLdY/test.o /tmp/ffconf.l64ruLdY/test.c
gcc -fuse-ld=gold -ldl -lpthread -Wl,--build-id -fsanitize=thread -fPIC -o /tmp/ffconf.l64ruLdY/test /tmp/ffconf.l64ruLdY/test.o
/usr/bin/ld.gold: error: cannot open libtsan_preinit.o: No such file or directory
collect2: error: ld returned 1 exit status
C compiler test failed.
安装tsan,并且测试
# 安装
$ apt-get install libtsan0 libtsan-dev# 测试
$ echo "int main(){return 0;}" | gcc -x c -fsanitize=thread - -o /dev/null
/usr/bin/ld: cannot find libtsan_preinit.o: No such file or directory
collect2: error: ld returned 1 exit status
寻找:
# 查找
$ find /usr -name "libtsan_preinit.o"
/usr/aarch64-linux-gnu/lib/libtsan_preinit.o# 查看机器类型
$ gcc -dumpmachine
x86_64-linux-gnu
后来才知道libtsan0:aarch64-linux-gnu 是 aarch64 版本的 TSAN 库。
解决方案:
把上面的--toolchain=gcc-tsan \
替换为--toolchain=clang-tsan \