LLVM3.4编译注意事项

本次讨论的是《Getting Started with LLVM Core Libraries》一书的内容。

这里使用的是较新的gcc7.5进行的编译,而读者使用的应该是gcc4.7,此外,可以注意到作者使用的操作系统是apple-macosx10.7.0,因此会出一些问题,以下是解决方案:

参考 https://github.com/maximeh/buildroot/blob/master/package/gcc/4.9.4/942-asan-fix-missing-include-signal-h.patch

修改projects/compiler-rt/asan_linux.cc,加入#include

参考 https://github.com/google/sanitizers/issues/822

修改projects/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc,#include 修改为#include "bits/types/res_state.h"。

修改projects/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc,internal_sigaltstack定义中,struct sigaltstack全部修改为stack_t,sanitizer_linux.h同理,并加入bits/types/stack_t.h。

修改projects/compiler-rt/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc,TracerThread函数中的sigaltstack替换为stack_t。

为了在64位机器上编译32位程序,需要使用sudo apt install gcc-multilib安装32位gcc支持,这样才能正常编译compiler-rt的测试程序。

为了顺利带着lldb一起编译,需要使用sudo apt install gcc-multilib g++-multilib安装32位的gcc和g++支持。

为了成功运行lldb,需要将llvm的lib目录加入LD_LIBRARY_PATH环境变量中。

书中的lldb演示中的下断点指令有误,这里应该是breakpoint set --name main,b main也可,作者给出的是gdb写法,不过按照演示执行run -v时,会出现"process launch failed: Child exec failed."的提示,怀疑是lldb版本过老,与ubuntu 18.04LTS不兼容。

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据