问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

LLVM教程项目:新手避坑指南

创作时间:
作者:
@小白创作中心

LLVM教程项目:新手避坑指南

引用
CSDN
10
来源
1.
https://blog.csdn.net/wsp_1138886114/article/details/135914404
2.
https://github.com/llvm/llvm-project/issues/101006
3.
https://blog.csdn.net/eloudy/article/details/136404449
4.
https://blog.csdn.net/shimly123456/article/details/137843219
5.
https://github.com/llvm/llvm-project/issues/96859
6.
https://github.com/Homebrew/homebrew-core/issues/169820
7.
https://www.cnblogs.com/apachecn/p/18193970
8.
https://community.sonarsource.com/t/compiler-path-issue-using-custom-llvm-installation-directory/127516
9.
https://forum.juce.com/t/cant-compile-vst3-with-llvm-18-on-arm-mac/62676
10.
https://wangjunwei.top/books/learn_llvm_17/chapters/01_Installing_LLVM.html

LLVM是一个强大的编译器基础设施项目,但对于新手来说,其复杂性可能会带来一些挑战。本文将从环境配置、编译错误到学习资源等多个方面,为LLVM新手提供一份实用的避坑指南。

01

LLVM入门:从零开始

什么是LLVM?

LLVM(Low Level Virtual Machine)最初是一个研究项目,现在已成为一个广泛使用的开源编译器基础设施。它不仅用于编译器开发,还被应用于各种需要代码生成和优化的场景,如GPU驱动、机器学习框架等。

LLVM的核心组件

  • Clang:一个C、C++、Objective-C等语言的前端编译器
  • LLVM Core Library:实现优化和代码生成的核心库
  • LLD:一个链接器
  • LLDB:一个调试器

安装LLVM

在基于Debian的系统上,可以使用以下命令安装LLVM及其开发库:

sudo apt-get install clang llvm

要查看安装的版本,可以使用:

clang --version && llvm-config --version

如果需要安装特定版本的LLVM,可以使用以下命令:

wget https://apt.llvm.org/llvm.sh && chmod +x llvm.sh && sudo ./llvm.sh 15

其中15是LLVM的版本号,可以根据需要进行更改。

02

环境配置常见问题

问题1:多个版本LLVM共存

在某些情况下,系统中可能同时存在多个版本的LLVM。这可能会导致编译时使用错误的版本,从而引发各种问题。

解决方案:可以通过设置LLVM_CONFIG环境变量来指定要使用的LLVM版本。例如:

export LLVM_CONFIG=/usr/bin/llvm-config-15

问题2:路径配置错误

如果LLVM的安装路径不在系统的搜索路径中,编译时可能会出现找不到LLVM工具或库的错误。

解决方案:确保LLVM的二进制文件路径已添加到系统的PATH环境变量中。例如:

export PATH=$PATH:/usr/local/llvm/bin
03

典型编译错误及解决方法

错误1:类型转换警告被当作错误

在编译LLVM项目时,有时会遇到类型转换相关的警告被当作错误处理的情况。例如:

error: conversion from ‘long unsigned int’ to ‘unsigned char’ may change value [-Werror=conversion]

解决方案:可以通过以下几种方式尝试解决:

  1. 在CMake配置时添加-Wno-error选项:

    cmake -G "Unix Makefiles" -DLLVM_ENABLE_PROJECTS="libc" -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-Wno-error" -DCMAKE_C_FLAGS="-Wno-error" -DCMAKE_INSTALL_PREFIX=$HOME/local/llvm/libc ../llvm-project-18.1.8.src/llvm
    
  2. 在编译时通过环境变量禁用警告:

    env CXXFLAGS="-Wno-ignored-qualifiers -Wno-stringop-truncation -Wno-cast-function-type" make
    
  3. 修改项目源码中的CMakeLists.txt文件,添加以下内容:

    set(CMAKE_COMPILE_WARNING_AS_ERROR OFF)
    

错误2:找不到LLVM头文件

在编译依赖LLVM的项目时,可能会遇到找不到LLVM头文件的错误,如:

fatal error: llvm-c/Transforms/IPO.h: 没有那个文件或目录

解决方案:确保已经安装了LLVM的开发库,并且在编译时正确指定了LLVM的包含目录。例如:

meson setup build --prefix=/usr -Dllvm=true
04

学习资源推荐

对于想要深入了解LLVM的新手来说,以下资源非常有帮助:

  1. LLVM官方文档https://llvm.org/docs/
  2. 《LLVM12学习手册》:这是一本面向初学者的书籍,涵盖了从安装到高级主题的多个方面,包含大量示例代码。
  3. LLVM源码https://github.com/llvm/llvm-project
  4. CSDN LLVM教程https://blog.csdn.net/wsp_1138886114/article/details/135914404

通过这些资源,你可以更系统地学习LLVM,掌握其核心概念和使用方法。

LLVM是一个功能强大且复杂的项目,但通过不断学习和实践,你一定能够掌握它。希望本文能帮助你在LLVM的学习之旅中少走弯路,快速上手。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号