clang+llvm+linux x86平台交叉编译arm64

2023-11-18

下载工具链

#! /bin/bash
workPATH=`pwd`/toolchain
mkdir -p $workPATH
cd $workPATH

URL_LLVM="https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.0/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz"
URL_GCC_LINARO="http://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/aarch64-linux-gnu/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz"
URL_SYSROOT="http://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/aarch64-linux-gnu/sysroot-glibc-linaro-2.25-2019.02-aarch64-linux-gnu.tar.xz"

FILENAME_LLVM="clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz"
FILENAME_GCC_LINARO="gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz"
FILENAME_SYSROOT="sysroot-glibc-linaro-2.25-2019.02-aarch64-linux-gnu.tar.xz"

wget ${URL_LLVM} -O ${FILENAME_LLVM}
wget ${URL_GCC_LINARO} -O ${FILENAME_GCC_LINARO}
wget ${URL_SYSROOT} -O ${FILENAME_SYSROOT}

tar -xvf ${FILENAME_LLVM}
tar -xvf ${FILENAME_GCC_LINARO}
tar -xvf ${FILENAME_SYSROOT}

cmake交叉编译文件 toolchain.cmake

clang 加上 -v 可以查看编译的详细信息

SET(ARCH aarch64)
SET(COMPILER CLANG)
SET(CMAKE_SYSTEM_NAME Linux )
SET(CMAKE_SYSTEM_PROCESSOR arm)

SET (CMAKE_C_COMPILER_WORKS 1)
SET (CMAKE_CXX_COMPILER_WORKS 1)

SET(triple aarch64-linux-gnu) 
SET(CMAKE_C_COMPILER_TARGET ${triple})
SET(CMAKE_CXX_COMPILER_TARGET ${triple})

SET(GCC_LINARO_TOOLCHAIN_ROOT "/***/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu")
SET(CMAKE_SYSROOT  "/***/sysroot-glibc-linaro-2.25-2019.02-aarch64-linux-gnu")

SET(CLANG_TOOLCHAIN_ROOT /***/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04)

SET(CMAKE_C_COMPILER ${CLANG_TOOLCHAIN_ROOT}/bin/clang CACHE PATH "CMake C compiler")
SET (CMAKE_C_FLAGS                "${CMAKE_C_FLAGS} -Wall -std=c99")
SET (CMAKE_C_FLAGS_DEBUG          "${CMAKE_C_FLAGS_DEBUG} -g")
SET (CMAKE_C_FLAGS_MINSIZEREL     "${CMAKE_C_FLAGS_MINSIZEREL} -Os -DNDEBUG")
SET (CMAKE_CEASE                  "${CMAKE_CEASE} -O4 -DNDEBUG")
SET (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O2 -g")

SET(CMAKE_CXX_COMPILER ${CLANG_TOOLCHAIN_ROOT}/bin/clang++ CACHE PATH "CMake C++ compiler")
SET (CMAKE_CXX_FLAGS                "${CMAKE_CXX_FLAGS} -Wall")
SET (CMAKE_CXX_FLAGS_DEBUG          "${CMAKE_CXX_FLAGS_DEBUG} -g")
SET (CMAKE_CXX_FLAGS_MINSIZEREL     "${CMAKE_CXX_FLAGS_MINSIZEREL} -Os -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELEASE        "${CMAKE_CXX_FLAGS_RELEASE} -O4 -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O2 -g")

set(CMAKE_AR ${CLANG_TOOLCHAIN_ROOT}/bin/llvm-ar CACHE PATH "cross compiler ar")
set(CMAKE_RANLIB ${CLANG_TOOLCHAIN_ROOT}/bin/llvm-ranlib CACHE PATH "cross compiler ranlib")
set(CMAKE_LINKER ${CLANG_TOOLCHAIN_ROOT}/bin/ld.lld CACHE PATH "cross compiler linker")
set(CMAKE_NM ${CLANG_TOOLCHAIN_ROOT}/bin/llvm-nm CACHE PATH "cross compiler nm")
set(CMAKE_OBJDUMP ${CLANG_TOOLCHAIN_ROOT}/bin/llvm-objdump CACHE PATH "cross compiler objdump")

set(CMAKE_C_FLAGS           "${MAKE_C_FLAGS} --gcc-toolchain=${GCC_LINARO_TOOLCHAIN_ROOT}")
set(CMAKE_CXX_FLAGS         "${CMAKE_CXX_FLAGS} --gcc-toolchain=${GCC_LINARO_TOOLCHAIN_ROOT}")

# set(CMAKE_EXE_LINKER_FLAGS      "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=${CMAKE_LINKER}")
# set(CMAKE_STATIC_LINKER_FLAGS   "${CMAKE_STATIC_LINKER_FLAGS} -fuse-ld=${CMAKE_LINKER}")
# set(CMAKE_SHARED_LINKER_FLAGS   "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=${CMAKE_LINKER}")

#clang需要指定路径
include_directories(/***/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.4.1/aarch64-linux-gnu)
include_directories(/***/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.4.1)
include_directories(/***/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/usr/include)
include_directories(/***/gl/include)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -fuse-ld=${CMAKE_LINKER} -fuse-ld=${CMAKE_LINKER}--sysroot=${CMAKE_SYSROOT} --gcc-toolchain=${GCC_LINARO_TOOLCHAIN_ROOT}" CACHE INTERNAL "" FORCE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=${CMAKE_LINKER}  --sysroot=${CMAKE_SYSROOT} --gcc-toolchain=${GCC_LINARO_TOOLCHAIN_ROOT}" CACHE INTERNAL "" FORCE)

SET(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

clang+llvm+linux x86平台交叉编译arm64 的相关文章

  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 如何使用 Cloud Init 挂载未格式化的 EBS 卷

    Context 我正在使用https wiki jenkins io display JENKINS Amazon EC2 Plugin https wiki jenkins io display JENKINS Amazon EC2 Pl
  • 在 Linux 上以编程方式设置 DNS 名称服务器

    我希望能够通过我的 C C 程序为 Linux 上的 DNS 名称服务器添加 IP 地址 我在一个带有只读 etc resolv conf 的嵌入式平台上 这意味着我不能简单地将 nameserver xxx xxx xxx xxx 行添加
  • tcpdump 是否受 iptables 过滤影响?

    如果我的开发机器有iptables规则到FORWARD一些数据包 这些数据包是否被 tcpdump 捕获 我有这个问题 因为我知道存在其他链称为INPUT如果数据包路由到 它会过滤发往应用程序的数据包FORWARD链 它会到达吗tcpdum
  • 就分页分段内存而言的程序寿命

    我对 x86 Linux 机器中的分段和分页过程有一个令人困惑的概念 如果有人能澄清从开始到结束所涉及的所有步骤 我们将很高兴 x86 使用分页分段内存技术进行内存管理 任何人都可以解释一下从可执行的 elf 格式文件从硬盘加载到主内存到它
  • 如何在linux中以编程方式获取dir的大小?

    我想通过 C 程序获取 linux 中特定目录的确切大小 我尝试使用 statfs path struct statfs 但它没有给出确切的大小 我也尝试过 stat 但它返回任何目录的大小为 4096 请建议我如何获取 dir 的确切大小
  • 从 ttyUSB0 写入和读取,无法得到响应

    我对 Linux tty 不太有经验 我的环境是带有丰富 USB 串行的 Raspbian 什么有效 stty F dev ttyUSB0 38400 cu l dev ttyUSB0 s 38400 cu to dev ttyUSB0作品
  • 无需超级用户即可在 Linux 中打开 RAW 套接字

    我必须编写一个在 Linux 上运行的 ping 函数 语言是 C 所以 C 也可以 在网上搜索并查看源代码ping命令 事实证明我应该创建一个原始套接字 icmp sock socket AF INET SOCK RAW IPPROTO
  • C 语言的符号表

    我目前正在开发一种执行模式匹配的静态分析工具 我在用Flex https github com westes flex生成词法分析器 我编写了代码来管理符号表 我不太有经验C 所以我决定将符号表实现为线性链表 include
  • 如何根据标签将单个 XML 文件拆分为多个

    我有一个带有标签的 XML 文件 我想像这样分割文件
  • 添加文件时运行 shell 命令

    我的 Linux 机器上有一个名为 images 的文件夹 该文件夹连接到一个网站 该网站的管理员可以向该网站添加图片 但是 当添加图片时 我想要一个命令来运行调整目录中所有图片的大小 简而言之 我想知道当新文件添加到特定位置时如何使服务器
  • 使用包管理器时如何管理 Perl 模块?

    A 最近的问题 https stackoverflow com questions 397817 unable to find perl modules in intrepid ibex ubuntu这让我开始思考 在我尝试过的大多数 Li
  • .net-core:ILDASM / ILASM 的等效项

    net core 是否有相当于 ILDASM ILASM 的功能 具体来说 我正在寻找在 Linux 上运行的东西 因此为什么是 net core ildasm 和 ilasm 工具都是使用此存储库中的 CoreCLR 构建的 https
  • Linux 为一组进程保留一个处理器(动态)

    有没有办法将处理器排除在正常调度之外 也就是说 使用sched setaffinity我可以指示线程应该在哪个处理器上运行 但我正在寻找相反的情况 也就是说 我想从正常调度中排除给定的处理器 以便只有已明确调度的进程才能在那里运行 我还知道
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v
  • 使用os.execlp时,为什么`python`需要`python`作为argv[0]

    代码是这样的 os execlp python python child py other args this works os execlp python child py other args this doesn t work 我读过
  • 我什么时候应该编写 Linux 内核模块?

    有些人出于某种原因想要将 Linux 中的代码从用户空间移动到内核空间 很多时候 原因似乎是代码应该具有特别高的优先级 或者只是 内核空间更快 这对我来说似乎很奇怪 我什么时候应该考虑编写内核模块 有一套标准吗 我怎样才能激励将代码保存在
  • 使用 Mountain Lion、Xcode 4.5 和 RVM 安装 Ruby?

    rvm install 1 9 3 with gcc clang 根据建议无法使用 RVM 在 Lion 下安装 Ruby GCC 问题 https stackoverflow com questions 8032824 cant inst
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • ansible unarchive 模块如何查找 tar 二进制文件?

    我正在尝试执行一个 ansible 剧本 该剧本的任务是利用unarchive模块 因为我是在 OSX 上执行此操作 所以我需要使用它gnu tar 而不是bsd tar通常与 OSX 一起提供 因为BSD tar 不受官方支持 https

随机推荐

  • Redis学习笔记2:了解 Redis 入门

    1 Redis是什么 Remote Dictionary Server 远程字典服务 Redis是现在最受欢迎的NoSQL数据库之一 Redis是一个使用ANSI C编写的开源 包含多种数据结构 支持网络 基于内存 可选持久性的键值对存储数
  • 如何的pycharm远程连接服务器Ftp

    话不多说 我们直接开始上图操作 以上就是整体的配置过程
  • ElasticSearch入门

    文章目录 一 ElasticSearch简介 1 什么是ElasticSearch 2 ElasticSearch使用案例 3 ElasticSearch对 Solr 二 ElasticSearch相关概念 术语 1 概述 2 索引 ind
  • MyBatis学习(二):解析MyBatis配置文件的写法和使用原理

    MyBatis学习 一 一个简单的演示 上面就是一个很简单的MyBatis的应用实例 可以看看 对于如何如此做可能就不是很清楚了 首先每一个MyBatis的应用程序都是以一个SqlSessionFactory对象的实例为核心 SqlSess
  • excel在双显示器上打开两个独立的xlsx表格

    平时配置的双显示器 要在两个显示器上各打开一个excel表格 一个用来做参考 另一个用来制作新表格 默认的office竟然不支持同时开两个独立窗口的excel表格 解决方式是安装微软的新补丁 http download microsoft
  • boa(web服务器)之交叉编译、移植、cgi、文件上传篇

    boa简介 BOA 服务器是一个小巧高效的web服务器 是一个运行于unix或linux下的 支持CGI的 适合于嵌入式系统的单任务的http服务器 源代码开放 性能高 由于它是一个单任务的Web服务器 只能一次完成用户的请求 而不会for
  • JS 读写文件(实例)

    http blog sina com cn s blog 62cd41130100l7c5 html 用js不能直接读取文件 但是可以利用浏览器提供的activex来实现读写文件的方法 只在IE下测试过 其他浏览器下的activex对象不太
  • 数据挖掘十大算法(二):K-Means、二分K-均值 python和sklearn实现

    早在刚接触数据挖掘算法时就已经看过 以及使用过简单的K 均值算法来做聚类 现在为了进一步的掌握该知识 通过机器学习实战又看了一遍 由于相对于其它算法较简单 所以看的也比较快 同时也学习了一下更为强大的二分K 均值算法 该算法建立在K Mea
  • 如何在spring框架中解决多数据源的问题

    在我们的项目中遇到这样一个问题 我们的项目需要连接多个数据库 而且不同的客户在每次访问中根据需要会去访问不同的数据库 我们以往在 spring 和 hibernate 框架中总是配置一个数据源 因而 sessionFactory 的 dat
  • 电赛-往届题目

    电赛 往届题目 1 2020年电赛题目 度盘 ob11 2 2019年电赛题目 国赛 度盘 du24 3 2018年电赛题目 度盘 eogn
  • angular5项目下利用router navigate实现页面跳转

    1 需要引入 import Router from angular router 2 ts中添加触发方法 navigate this router navigate targetRouter queryParams id this sele
  • webpack中引用图片出现Module parse failed: Unexpected character '�' (1:0) You may need an appropriate loader

    1 查看url loader和file loader有没有安装好 如果没有 重新安装 file loader安装指令 npm install save dev file loader url loader安装指令 npm install u
  • UE4 VR WidgetInteraction 局域网设定

    无论用什么 我们要先确定是什么 鲁迅 下面是关于WidgetInteraction的官方定义 控件交互组件执行光线投射 确定它是否命中世界场景中的控件组件 如命中 可设置规则确定与其交互的方式 交互通过模拟定义的按键来执行 例如一个按钮可通
  • Python语言基础—一文看懂Python异常

    系列文章目录 Python语言基础 注释的作用及分类 Python语言基础 常用运算符总结 Python语言基础 定义变量与数据类型 Python语言基础 if判断和循环总结 Python语言基础 理解面向对象 Python语言基础 集合的
  • Java学习--JDBC操作数据库(直析操作)

    1 了解JDBC的常用类和接口 DriverManager类 用来管理数据库中的所有驱动程序 Connection接口 代表与特定的数据库的连接 Statement接口 用于创建向数据库中传递SQL语句的对象 PreparedStateme
  • -day25--mysql入门

    第四模块 MySQL数据库 数据库管理系统 DBMS 专注于帮助开发者解决数据存储的问题 这样开发者就可以把主要精力放在实现业务功能上了 业内有很多的的数据库管理系统产品 例如 MySQL 原来是sun公司 后来被甲骨文收购 现在互联网企业
  • 排序算法(java版本)

    1 直接插入排序 1 基本思想 在要排序的一组数中 假设前面 n 1 n gt 2 个数已经是排 好顺序的 现在要把第n个数插到前面的有序数中 使得这n个数 也是排好顺序的 如此反复循环 直到全部排好顺序 2 实例 3 用java实现 pa
  • 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2038 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MDd_DynamicDe

    系列文章目录 文章目录 系列文章目录 前言 一 错误原因 二 解决问题 在这里插入图片描述 https img blog csdnimg cn a8ce751feae54668aa54ffe2e0031560 png 前言 严重性 代码 说
  • 2023年网络安全考试试题,背下来通过率99%

    1 关于数据使用说法错误的是 A 在知识分享 案例中如涉及客户网络数据 应取敏感化 不得直接使用 B 在公开场合 公共媒体等谈论 传播或发布客户网络中的数据 需获得客户书面授权或取敏感化 公开渠道获得的除外 C 客户网络数据应在授权范围内使
  • clang+llvm+linux x86平台交叉编译arm64

    下载工具链 bin bash workPATH pwd toolchain mkdir p workPATH cd workPATH URL LLVM https github com llvm llvm project releases