LLVM/clang & lib路径 & 测试代码

2023-05-16

  • 部分转载自:Ubuntu编译安装llvm-clang
  • Ubuntu14.04/Linux安装LLVM/clang-3.7(带有标准库 libc++,libc++abi)
  • 所需即所获:像 IDE 一样使用 vim

安装

方法一

下载 LLVM、clang 及辅助库源码:
  • cd ~/downloads
  • svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
  • cd llvm/tools
  • svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
  • cd ../..
  • cd llvm/tools/clang/tools
  • svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra
  • cd ../../../..
  • cd llvm/projects
  • svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
  • cd ..

先关掉其他应用,尽量多的系统资源留给 GCC 进行编译 clang 源码

  • mkdir build
  • cd build
  • ../configure –enable-optimized CC=/usr/bin/GCC CXX=/usr/bin/g++
  • 接下来,你先洗个澡,再约个会,回来应该编译好了(thinkpad T410I,CPU 奔腾双核 P6000,MEM 4G DDRIII,耗时 2 小时
  • clang –version 进行确认

方法二

  • 上面的方法在无线网的环境下可能比较慢,推荐下面这种方法
下载llvm的源代码
  • wget http://llvm.org/releases/3.6.0/llvm-3.6.0.src.tar.xz
  • tar xf llvm-3.6.0.src.tar.xz
  • mv llvm-3.6.0.src llvm
下载clang的源代码
  • cd llvm/tools
  • wget http://llvm.org/releases/3.6.0/cfe-3.6.0.src.tar.xz
  • tar xf cfe-3.6.0.src.tar.xz
  • mv cfe-3.6.0.src clang
  • cd ../..
下载clang-tools-extra的源代码
  • cd llvm/tools/clang/tools
  • wget http://llvm.org/releases/3.6.0/clang-tools-extra-3.6.0.src.tar.xz
  • tar xf clang-tools-extra-3.6.0.src.tar.xz
  • mv clang-tools-extra-3.6.0.src extra
  • cd ../../../..
下载compiler-rt的源代码
  • cd llvm/projects
  • wget http://llvm.org/releases/3.6.0/compiler-rt-3.6.0.src.tar.xz
  • tar xf compiler-rt-3.6.0.src.tar.xz
  • mv compiler-rt-3.6.0.src compiler-rt
  • cd ../..

配置编译选项

  • cd ..
  • ./configure –enable-optimized CC=gcc CXX=g++
  • 注意:3.7.0以后,不允许在源码树中进行构建,我们可以在llvm源码目录同级目录中创建一个目录build目录,然后使用绝对路径进行构建
  • make -j2 编译llvm
  • 编译成功后的提示:
  • llvm[0]: * Completed Release+Asserts Build
  • make install 安装编译好的llvm
  • clang –version 会安装在/usr/local/bin中,检查clang的版本
  • clang version 3.6.0 (tags/RELEASE_360/final)
如果还是旧版本,需要将/usr/bin/clang指向clang 3.6.0:
  • ln -s /usr/local/bin/clang /usr/bin/clang

方法三

  • 有更加简单的方法… 预编译包
  • 其实Ubuntu14.04安装LLVM/clang-3.7很简单,直接到LLVM官网(http://llvm.org/releases/download.html)下载ubuntu预编译包(Pre-Built Binaries)——Clang for x86_64 Ubuntu 14.04 (.sig)
  • 然后解压,进入到解压的文件夹里(里面有四个文件夹bin,include,lib,share),将这四个文件夹拷到/usr/local下
  • sudo cp -r ~/放解压文件的目录名/clang+llvm-3.7.0-x86_64-linux-gnu-ubuntu-14.04/* /usr/local
  • clang –v 查看版本
  • libc++和libc++abi已经配置好,直接使用即可(以前的3.6版本的是没有配置好的,需要自己配置)
  • 其它Linux操作系统下载对应的相关预编译包,按照前述步骤也可使用。想要知道预编译包是否配置了 libc++和libc++abi,可到解压的文件里的lib文件夹里看看是否有libc++.so,libc++.so.1,libc++.so.1.0,libc++abi.a,libc++abi.so,libc++abi.so.1,libc++abi.so.1.0文件,有的话就表示支持
  • 如果下载速度慢…百度云 神器…

测试代码

  • 建立一个名为main.cpp的文档,写入
    #include <iostream>
    #include <string>
    class MyClass
    {
      public:
      std::string s ="Hello, world\n"; // Non-static data member initializer
    };
    int main()
    {
      std::cout << MyClass().s;
    }
  • 在终端输入
  • clang++ -std=c++11 -stdlib=libc++ -Werror -Weverything -Wno-disabled-macro-expansion -Wno-float-equal -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-global-constructors -Wno-exit-time-destructors -Wno-missing-prototypes -Wno-padded -Wno-old-style-cast -lc++ -lc++abi main.cpp
  • 如果没问题的话会生成a.out的二进制文件,运行它会显示出Hello,world
  • 这一大波编译选项很崩溃么 @_@!我来简单说说:
  • -std=c++11:使用 C++11 新特性;
  • -stdlib=libc++:指定使用 clang 的标准库头文件 /usr/include/c++/v1/;
  • -Werror:将所有编译警告视为编译错误;
  • -Weverything:打开所有编译警告选项。在 GCC 中,无法通过单个选项打开所有编译警告,必须繁琐的同时指定 -Wall、-Wextra、以及大量分散的其他选项,为此 clang 新增了 -Weverything。
  • 当然,有些警告意义不大,完全可忽略,如下:
  • -Wno-disabled-macro-expansion:禁止使用宏表达式,忽略此警告;
  • -Wno-float-equal:浮点类型不应使用 != 和 == 运算符,忽略此警告;
  • -Wno-c++98-compat、-Wno-c++98-compat-pedantic:采用 C++11 新特性的代码无法兼容 C++98,忽略此警告;
  • -Wno-global-constructors:在 main() 之前存在执行的代码,忽略此警告;
  • -Wno-exit-time-destructors:在 main() 之后存在执行的代码,忽略此警告;
  • -Wno-missing-prototypes:虽有函数定义但缺失函数原型,忽略此警告;
  • -Wno-padded:结构体大小应为 4 字节整数倍,忽略此警告(编译器自动调整对齐边界);
  • -Wno-old-style-cast:C 语言的强制类型转换,忽略此警告;
  • -lc++:指定链接 /usr/lib/libc++.so 标准库(缺失将导致链接失败!);
  • -lc++abi:指定链接 /usr/lib/libc++abi.so 标准库(缺失将导致链接失败!)。
  • 详细的见Github的参考文章

添加库文件路径

  • 第一次执行可能会报找不到库文件的错误
Find where the library is placed if you don’t know it.
  • cd /
  • sudo find ./ | grep the_name_of_the_file.so
Check for the existence of the dynamic library path environnement variable(LD_LIBRARY_PATH)
  • echo LD_LIBRARY_PATH
  • if there is nothing to be display we need to add the default path value (or not as you wich)
  • $ LD_LIBRARY_PATH=/usr/local/lib
We add the desire path and export it and try the application
  • LDLIBRARYPATH= LD_LIBRARY_PATH:/my_library/path.so.something
  • $ export LD_LIBRARY_PATH
  • $ ./my_app
或者在/etc/bash.bashrc中添加
  • export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

分隔符

附录

  • LLVM 是个很大很大的项目群,几乎把从编译到调试的各个构建环节都重新实现了一遍,目的:一是尽可能地模块化现有代码以方便在此基础上进行二次开发、一是提供比传统构建工具链更好的用户体验。clang是LLVM的子项目,是一款非常优秀的C++ 编译器,前端 clang + 后端 LLVM(后简称 LLVM/clang)就是一款可替代 GCC 的优秀编译
  • GCC 配套的标准库涉及 libstdc++ 和 libsupc++ 两个子库,前者是接口层(即,上层的封装),后者是实现层(即,底层的具体实现),对应到clang,则libc++(接口层)和 libc++abi(实现层)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LLVM/clang & lib路径 & 测试代码 的相关文章

随机推荐

  • Intel RealSense D435i + BundleFusion 实现实时三维建图

    内容概览 摘要操作环境RealSense D435i 介绍BundleFusion工程环境配置安装 RealSense SDKRealSense SDK 本地环境配置BundleFusion 工程属性表相机类型设置修改 GlobalAppS
  • CrazePony与计算机视觉

    大家好 我是CrazePony的视觉攻城狮 Ziv Lin 我擅长的部分是计算机视觉和嵌入式编程 非常荣幸地能够加入CrazePony团队 众所周知 一个飞行器想要做到悬停的话 xff0c 必须引入一个位置环进行反馈 xff0c 也就是说需
  • Mac OS系统下kernel_task占用大量CPU资源导致系统卡顿

    来这里找解决方案的童鞋 xff0c 如果你的机器还没过保 果断去找官修 xff0c 忽略这篇文章 xff01 心急的童鞋直接看目录 xff0c 有传送门 xff01 但是仔细看文章可能有奇效 xff01 最近博客更新进度严重滞后 因为我遭遇
  • linux环境打包python工程为可执行程序

    本次又个需求 xff0c 在ubuntu上面开发的python代码程序需要打包成一个可执行程序然后交付给甲方 xff0c 因为不能直接给源码给甲方 xff0c 所以寻找方法将python开发的源码打包成一个可执行程序 xff0c 注意是打包
  • windows下python调用海康威视网络摄像头sdk

    本文参考以下博文加自己的实践 xff0c 发现有些步骤是不必要的 xff0c 例如不需要为opencv等第三方库指定路径 运行环境 xff1a 准备工作 1 海康SDK下载 2 下载安装vcpkg 3 安装Swig 4 下载OpenCV s
  • Apollo代码学习(七)—MPC与LQR比较

    Apollo代码学习 MPC与LQR比较 前言研究对象状态方程工作时域目标函数求解方法 前言 Apollo中用到了PID MPC和LQR三种控制器 xff0c 其中 xff0c MPC和LQR控制器在状态方程的形式 状态变量的形式 目标函数
  • 27 | Ubuntu18.04.5 安装python3.7及卸载

    目录 1 前期准备1 1安装所需依赖 重要 1 2 配置Python版本切换1 2 1 查看候选列表中已有的Python版本1 2 2 添加 python amp python3 指向选择1 2 3 查看候选列表中已有的Python版本1
  • opencv库作为第三方库

    在编译一个依赖opencv库的库时 xff0c 报出以下错误 xff1a undefined reference to symbol ZN2cv6imreadERKNS 6StringEi libopencv core so 2 4 err
  • 银河麒麟V10系统NetworkManager服务启动失败的解决方法

    目录 一 NetworkManger网络服务启动失败 二 故障定位过程 xff08 一 xff09 重装NetworkManager未解决 xff08 二 xff09 重装openssl未解决 三 解决方案 xff08 一 xff09 修改
  • argparse模块

    1模块简介2Example3argparse三个主要函数 parser argparseArgumentParserparseradd argumentargs parserparse args 4ArgumentParser对象 对象参数
  • 【Docker】非root用户加入docker用户组省去sudo (三)

    你问我爱你有多深 xff0c 这坑后面还有坑 为什么需要创建docker用户组 xff1f Docker守候进程绑定的是一个unix socket xff0c 而不是TCP端口 这个套接字默认的属主是root xff0c 其他是用户可以使用
  • 带你玩转Jetson Xavier NX系列教程 | Xavier NX刷机教程

    写在最前 xff1a xff08 转载请注明文章出处 xff09 NVIDIA AGX Jetson Xavier NX 开发人员套件终于拿到手了 xff0c Nx的性能虽然被砍了不少 xff0c 但是完全碾压了Nano和TX2 xff0c
  • 使用Intel RealSense D435i自制离线数据集跑通BundleFusion

    内容概览 摘要操作环境大致流程录制数据集格式转换解析 bag文件时间戳对齐制作源格式封装为 sens格式 离线三维重建修改 zParametersDefault txt修改 zParametersBundlingDefault txt重建效
  • 互斥量、临界区、信号量、事件标志组和消息邮箱

    为了好的理解互斥量 临界区 信号量 事件标志组和消息邮箱 xff0c 下面一些知识对初学者来说很重要 xff1a 为了实现各任务之间的合作和无冲突的运行 xff0c 在有关联的任务之间必须建立一些制约关系 这些制约关系主要有两种 xff1a
  • MAVLink协议通信分析——(二)消息结构

    消息结构 一 消息包结构 消息包结构定义了消息包在发送 接收 初次解析中所需信息的存储规则 在MavLink 1 0版本中 xff0c 消息包结构如下图表所示 首部由STX段引导 xff0c 具体含义可在表中查询 xff0c 其中校验位标记
  • MAVLink协议通信分析——(三)消息解析

    第三章 消息解析 分析过消息包的结构后 xff0c 继续向消息包的内部探索 xff0c 开始分析负载信息PAYLOAD 在消息库中 xff0c 每条消息都作为一个类存在 xff08 Java版本 xff09 xff0c 类中的注释文本详细地
  • Linux 加权限命令 chmod +755,chmod +777,chmod +x 的区别

    chmod 43 x 的意思就是给执行权限 LINUX下不同的文件类型有不同的颜色 xff0c 这里 蓝色表示目录 绿色表示可执行文件 xff0c 可执行的程序 红色表示压缩文件或包文件 浅蓝色表示链接文件 灰色表示其它文件 红色闪烁表示链
  • Docker安装Autoware

    使用gitee上的autoware源码包编译遇到的问题非常多 xff0c 主要是依赖很多 使用Docker来安装autoware相对简单很多 1 xff0c Docker用户权限问题 sudo groupadd docker sudo gp
  • cv_bridge与OpenCV版本关联

    1 xff0c ros melodic中通过apt get安装cv bridge xff0c 其pc文件中依赖的opencv版本为3 2 xff0c 如果系统安装其他的opencv版本 xff0c 需要把cv bridge源码下载到系统本地
  • LLVM/clang & lib路径 & 测试代码

    部分转载自 xff1a Ubuntu编译安装llvm clangUbuntu14 04 Linux安装LLVM clang 3 7 xff08 带有标准库 libc 43 43 xff0c libc 43 43 abi xff09 所需即所