这里是记录在编译 llvm 官方 tutorial 时,前两章都是使用的标准库,在第 3 章就开始依赖 llvm 项目工程的内容了。
官网编译命令为:
clang++ -g -O3 toy.cpp `llvm-config --cxxflags --ldflags --system-libs --libs core` -o toy
在本地编写代码,编译时可能会遇到以下问题:
头文件找不到
fatal error: ‘llvm/ADT/APFloat.h’ file not found
#include “llvm/ADT/APFloat.h”
类似上述错误,是相关依赖路径编译时找不到,需要将 llvm/include 和 llvm/build/include 都设置在环境变量中,或者 -I 加到编译选项中来。
llvm-config 选项不支持
大概会遇到类似下面的错误:
clang: error: unsupported option ‘–cxxflags’
clang: error: unsupported option ‘–ldflags’
clang: error: unsupported option ‘–system-libs’
clang: error: unsupported option ‘–libs’
clang: error: no such file or directory: ‘llvm-config’
clang: error: no such file or directory: ‘core’
首先根据官网命令,llvm-config 需要用单引号括起来,
编译以后会在 llvm/build/bin 下面找到 llvm-config 选项,所以页要将 llvm/build/bin 加入到环境变量 PATH 中,是编译时可以找到。
ld: symbol(s) not found for architecture arm64
如果缺少依赖项,或者上面 llvm-config 没有配置好,直接编译就会遇到类似上面的报错,llvm-config 配置好,在当前环境下可以直接运行应该就不会有这个问题了。
解决上述问题就可以继续下去了:
tutorial %./a.out
ready> def foo(a b) a*a + 2*a*b + b*b;
ready> Read funtion definition: define double @foo(double %a, double %b) {
entry:
%multmp = fmul double %a, %a
%multmp1 = fmul double 2.000000e+00, %a
%multmp2 = fmul double %multmp1, %b
%addtmp = fadd double %multmp, %multmp2
%multmp3 = fmul double %b, %b
%addtmp4 = fadd double %addtmp, %multmp3
ret double %addtmp4
}

这篇博客记录了在编译LLVM官方教程时遇到的问题及解决方法。从第三章开始,教程依赖于LLVM项目内容,需要正确配置编译环境,包括设置头文件路径和使用llvm-config。编译命令可能因llvm-config选项不被支持而失败,需确保使用正确的命令格式,并将llvm/build/bin目录添加到PATH环境变量中。如果遇到符号未找到的错误,可能是依赖项缺失或llvm-config未配置妥当。解决这些问题后,即可继续进行教程并运行编译后的代码。
2726





