4

当编译如下时,我们clang++构建的带有未定义行为清理程序的可执行文件可以正常工作:

ccache clang++ -Qunused-arguments -fcolor-diagnostics -c -MMD -MP -std=c++11 --O1 -g3 -fPIC -fsanitize=address,undefined -fno-omit-frame-pointer -I /usr/lib/jvm/java-8-openjdk-amd64/include -I /usr/lib/jvm/java-8-openjdk-amd64/include/linux -o native/instrumen.o native/instrument.cpp

并链接到一个可执行文件,如下所示:

ccache clang++ -Qunused-arguments -fcolor-diagnostics -fsanitize=address,undefined -o cegis -Wl,--start-group native/instrument.o -Wl,--end-group

但是,如果我们将其链接到共享库中,如下所示:

ccache clang++ -Qunused-arguments -fcolor-diagnostics -fsanitize=address,undefined -shared -o libsynth4j.so native/synth4j.o native/instrument.o ../lib/libinfo.a

尝试使用 JNI 从 Java 加载库时出现以下错误:

libsynth4j.so: undefined symbol: __ubsan_vptr_type_cache

使用 clang 未定义行为清理程序创建共享库而不是可执行文件时是否有任何其他注意事项?我们的 clang++ 版本是 3.7,在 Ubuntu Linux 上运行。

4

0 回答 0