Linux 未定义对'的引用_asan#u init#u v4';编译时
当链接我用AddressSanitizer工具编译的代码时,我得到了许多类似于Linux 未定义对'的引用_asan#u init#u v4';编译时,linux,address-sanitizer,Linux,Address Sanitizer,当链接我用AddressSanitizer工具编译的代码时,我得到了许多类似于未定义引用“\u asan\u init\u v4”的错误 clang -fPIC -g -fno-omit-frame-pointer -DNDEBUG -Wl,-z,defs \ -shared -Wl,-soname,libqpid-dispatch.so -o libqpid-dispatch.so \ CMakeFiles/qpid-dispatch.dir/alloc_pool.c.o \ CM
未定义引用“\u asan\u init\u v4”
的错误
clang -fPIC -g -fno-omit-frame-pointer -DNDEBUG -Wl,-z,defs \
-shared -Wl,-soname,libqpid-dispatch.so -o libqpid-dispatch.so \
CMakeFiles/qpid-dispatch.dir/alloc_pool.c.o \
CMakeFiles/qpid-dispatch.dir/amqp.c.o \
[...]
-lpthread -lrt -ldl -lpython3.7m -lwebsockets -fsanitize=address
错误的一些例子
/nix/store/1zf4cnaaidjajwb4gx4mnkqc5dypkcdy-binutils-2.31.1/bin/ld: CMakeFiles/qpid-dispatch.dir/http-libwebsockets.c.o: in function `qd_http_server_free':
/home/jdanek/repos/qpid/qpid-dispatch/src/http-libwebsockets.c:824: undefined reference to `__ubsan_handle_type_mismatch_v1'
/nix/store/1zf4cnaaidjajwb4gx4mnkqc5dypkcdy-binutils-2.31.1/bin/ld: /home/jdanek/repos/qpid/qpid-dispatch/src/http-libwebsockets.c:825: undefined reference to `__ubsan_handle_type_mismatch_v1'
/nix/store/1zf4cnaaidjajwb4gx4mnkqc5dypkcdy-binutils-2.31.1/bin/ld: /home/jdanek/repos/qpid/qpid-dispatch/src/http-libwebsockets.c:825: undefined reference to `__ubsan_handle_type_mismatch_v1'
/nix/store/1zf4cnaaidjajwb4gx4mnkqc5dypkcdy-binutils-2.31.1/bin/ld: /home/jdanek/repos/qpid/qpid-dispatch/src/http-libwebsockets.c:825: undefined reference to `__ubsan_handle_type_mismatch_v1'
/nix/store/1zf4cnaaidjajwb4gx4mnkqc5dypkcdy-binutils-2.31.1/bin/ld: /home/jdanek/repos/qpid/qpid-dispatch/src/http-libwebsockets.c:825: undefined reference to `__ubsan_handle_type_mismatch_v1'
/nix/store/1zf4cnaaidjajwb4gx4mnkqc5dypkcdy-binutils-2.31.1/bin/ld: /home/jdanek/repos/qpid/qpid-dispatch/src/http-libwebsockets.c:825: undefined reference to `__asan_report_load8'
/nix/store/1zf4cnaaidjajwb4gx4mnkqc5dypkcdy-binutils-2.31.1/bin/ld: /home/jdanek/repos/qpid/qpid-dispatch/src/http-libwebsockets.c:825: undefined reference to `__asan_report_load8'
注意:我使用的是NixOS 19.09和Clang 10。我不确定这是否是问题所在,但对我来说,将
-lasan
添加到链接器选项足以让我的程序生成并运行。你应该使用编译标志-fsanize=address
:
请注意,
-fsanize=address
=-lasan
+一些附加选项。ASan开发人员不鼓励使用-lasan
。将-static libasan
添加到链接器标志将解决此问题。能否提供有关如何编译代码的更多详细信息(例如编译和链接行)。编译错误:-Wall,-g,Wextra,-Wno缺少字段初始值设定项,-Wformat=2,-Wpointer arith,-fno省略帧指针,-m64,-D_LARGEFILE\u SOURCE,-D_FILE\u OFFSET\u BITS=64,-fanizize=address,-fno stack protector,-fno省略帧指针,-fanizize recover=address,-fanizize=address,-fanizize=undefined,-D_GLIBCXX使用\u cx11_ABI=0,-fgnelink标志:-m64,-rdynamic,-fanizize=address,-fanizize=address,-fanizize=address,-fanizize=undefined,-D_glibcx11=0Hm,我唯一想到的是你机器上的GCC和libasan不同步。您正在使用自定义GCC吗?您是否可以运行readelf-sW FILENAME | grep asan_init
,将FILENAME
设置为使用-fsanize=address
编译的目标文件之一,并设置为路径/to/libasan。因此-fsanize=address
的可能副本对于GCC来说是不够的。@jhasse:您有这样的链接吗?请注意,您需要-fsanize=address
在CFLAGS
/cxflags
和LDFLAGS
中,如上所述。-static libasan
不建议在GCC上使用(不太受支持,请参见示例)。这个答案是错误的,添加-lasan
已被Asan开发人员多次劝阻,例如在。唯一受支持的方法是在CFLAGS
/cxflags
和LDFLAGS
中使用-fsanize=address
(请参阅)。