ubuntu14编译安装llvm&clang 3.9

#简介

#依赖

  1. cmake-3.8+
    安装方法见上篇博文,http://blog.csdn.net/x356982611/article/details/72730332
  2. python-2.7
  3. libffi-3.2.1
  4. 下载libffi 地址:ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz
    用下面命令编译安装libffi
	    -i include/Makefile.in &&
	
	sed -e '/^includedir/ s/=.*$/=@includedir@/' \
	    -e 's/^Cflags: -I${includedir}/Cflags:/' \
	    -i libffi.pc.in        &&
	
	./configure --prefix=/usr --disable-static &&
	make
	
	sudo make install

#整理源码

从官网下载源码 http://releases.llvm.org/download.html#3.9.1
这里写图片描述

解压 llvm-3.9.1.src.tar.xz 后重命名为llvm
解压cfe-3.9.1.src.tar.xz 后重命名为clang 放到llvm/tools目录
解压lld-3.9.0.src.tar.xz后重命名为lld 放到llvm/tools目录
解压lldb-3.9.1.src.tar.xz后重命名为lldb 放到llvm/tools目录
解压clang-tools-extra-3.9.1.src.tar.xz后重命名为extra 放到llvm/tools目录
解压后compiler-rt-3.9.1.src.tar.xz重命名为 compiler-rt 放到目录llvm/projects目录
解压libcxx-3.9.1.src.tar.xz后重命名为libcxx 放到目录llvm/projects目录
解压libcxxabi-3.9.1.src.tar.xz后重命名为libcxxabi 放到目录llvm/projects目录

解压后重命名为 放到目录

最后结构是这样的

$ tree -d -L 2

.
├── bindings
│   ├── go
│   ├── ocaml
│   └── python
├── cmake
│   ├── modules
│   └── platforms
├── docs
│   ├── CommandGuide
│   ├── Frontend
│   ├── HistoricalNotes
│   ├── _ocamldoc
│   ├── _static
│   ├── TableGen
│   ├── _templates
│   ├── _themes
│   └── tutorial
├── examples
│   ├── BrainF
│   ├── ExceptionDemo
│   ├── Fibonacci
│   ├── HowToUseJIT
│   ├── Kaleidoscope
│   ├── ModuleMaker
│   ├── OCaml-Kaleidoscope
│   └── ParallelJIT
├── include
│   ├── llvm
│   └── llvm-c
├── lib
│   ├── Analysis
│   ├── AsmParser
│   ├── Bitcode
│   ├── CodeGen
│   ├── DebugInfo
│   ├── ExecutionEngine
│   ├── Fuzzer
│   ├── IR
│   ├── IRReader
│   ├── LibDriver
│   ├── LineEditor
│   ├── Linker
│   ├── LTO
│   ├── MC
│   ├── Object
│   ├── ObjectYAML
│   ├── Option
│   ├── Passes
│   ├── ProfileData
│   ├── Support
│   ├── TableGen
│   ├── Target
│   └── Transforms
├── projects
│   ├── compiler-rt
│   ├── libcxx
│   └── libcxxabi
├── resources
├── runtimes
├── test
│   ├── Analysis
│   ├── Assembler
│   ├── Bindings
│   ├── Bitcode
│   ├── BugPoint
│   ├── CodeGen
│   ├── DebugInfo
│   ├── Examples
│   ├── ExecutionEngine
│   ├── Feature
│   ├── FileCheck
│   ├── Instrumentation
│   ├── Integer
│   ├── JitListener
│   ├── LibDriver
│   ├── Linker
│   ├── LTO
│   ├── MC
│   ├── Object
│   ├── ObjectYAML
│   ├── Other
│   ├── SymbolRewriter
│   ├── TableGen
│   ├── ThinLTO
│   ├── tools
│   ├── Transforms
│   ├── Unit
│   ├── Verifier
│   └── YAMLParser
├── tools
│   ├── bugpoint
│   ├── bugpoint-passes
│   ├── clang
│   ├── dsymutil
│   ├── extra
│   ├── gold
│   ├── llc
│   ├── lld
│   ├── lldb
│   ├── lli
│   ├── llvm-ar
│   ├── llvm-as
│   ├── llvm-as-fuzzer
│   ├── llvm-as-parasitic-coverage-repro
│   ├── llvm-bcanalyzer
│   ├── llvm-config
│   ├── llvm-cov
│   ├── llvm-c-test
│   ├── llvm-cxxdump
│   ├── llvm-diff
│   ├── llvm-dis
│   ├── llvm-dwarfdump
│   ├── llvm-dwp
│   ├── llvm-extract
│   ├── llvm-go
│   ├── llvm-jitlistener
│   ├── llvm-link
│   ├── llvm-lto
│   ├── llvm-mc
│   ├── llvm-mc-fuzzer
│   ├── llvm-mcmarkup
│   ├── llvm-nm
│   ├── llvm-objdump
│   ├── llvm-pdbdump
│   ├── llvm-profdata
│   ├── llvm-readobj
│   ├── llvm-rtdyld
│   ├── llvm-shlib
│   ├── llvm-size
│   ├── llvm-split
│   ├── llvm-stress
│   ├── llvm-symbolizer
│   ├── llvm-vtabledump
│   ├── lto
│   ├── msbuild
│   ├── obj2yaml
│   ├── opt
│   ├── sancov
│   ├── sanstats
│   ├── verify-uselistorder
│   ├── xcode-toolchain
│   └── yaml2obj
├── unittests
│   ├── ADT
│   ├── Analysis
│   ├── AsmParser
│   ├── Bitcode
│   ├── CodeGen
│   ├── DebugInfo
│   ├── ExecutionEngine
│   ├── IR
│   ├── LineEditor
│   ├── Linker
│   ├── MC
│   ├── MI
│   ├── ObjectYAML
│   ├── Option
│   ├── ProfileData
│   ├── Support
│   └── Transforms
└── utils
    ├── abtest
    ├── bugpoint
    ├── buildit
    ├── count
    ├── crosstool
    ├── emacs
    ├── FileCheck
    ├── fpcmp
    ├── gdb-scripts
    ├── git
    ├── git-svn
    ├── jedit
    ├── kate
    ├── KillTheDoctor
    ├── lint
    ├── lit
    ├── llvm-build
    ├── llvm-lit
    ├── LLVMVisualizers
    ├── Misc
    ├── not
    ├── PerfectShuffle
    ├── release
    ├── TableGen
    ├── Target
    ├── testgen
    ├── textmate
    ├── unittest
    ├── valgrind
    ├── vim
    └── yaml-bench

#编译

cmake -G "Unix Makefiles" \
	-DPYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())")  \
    -DPYTHON_LIBRARY=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))") \
  -DCMAKE_INSTALL_PREFIX=/usr  \
  -DCMAKE_BUILD_TYPE=Release \
  -DLLVM_ENABLE_FFI=ON \
  -DLLVM_BUILD_LLVM_DYLIB=ON \
  -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
  -DLLVM_TARGETS_TO_BUILD="host" \
  -Wno-dev \
  ../llvm

make -j4
sudo make install

如果安装了Ninja也可以用它来编译,速度比make要快很多(也耗资源 ninja install时候虚拟机卡半死了) cmake配置替换成这个就可以了
cmake -G Ninja
编译过程是相似的
ninja -j2
ninja install

#测试

-这里写图片描述

#常见问题

  • Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
    cmake找不到python的头文件和库文件 添加这一段就好了 如果使用python3 用 python3 -c … 代替 python -c …就可以
	$ cmake .. \
	-DPYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())")  \
	-DPYTHON_LIBRARY=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))")
  • Could NOT find SWIG (missing: SWIG_EXECUTABLE SWIG_DIR)
 sudo apt-get install swig
  • llvm/tools/lldb/include/lldb/Host/Editline.h:49:22: fatal error: histedit.h: 没有那个文件或目录
    #include <histedit.h>
	sudo apt-get install libedit-dev
  • q
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您可以从LLVM官方网站下载LLVM的Windows版本。下载网址是http://releases.llvm.org/download.html。您可以选择适合您的操作系统的版本进行下载,比如LLVM 9.0.0的Windows (64-bit)版本。下载完成后,您可以运行setup.exe进行安装。建议您将安装路径选择在没有空格的地方,比如直接安装在C盘下。如果您只需要使用clang工具而不需要libclang库,可以跳过Step3。如果您需要使用libclang,可以按照引用\[2\]中的指引,在cmd中转到build文件夹下,执行cmake命令来配置LLVM。在配置时,您可以根据您的需求选择合适的参数。在安装LLVM时,您可以根据引用\[3\]中的指引,选择需要的组件进行安装。如果只是为了使用LLVM,只需勾选“使用C++的桌面开发”这一项和右侧“可选”里勾选的选项即可。如果需要使用libclang,还需要安装VS的命令行工具。 #### 引用[.reference_title] - *1* *3* [windows下LLVMclang, libclang)的安装和配置](https://blog.csdn.net/weixin_46570816/article/details/104998166)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [win10下安装llvmclang](https://blog.csdn.net/wgx571859177/article/details/80376134)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值