超简洁的群晖交叉编译教程

2023-05-16

超简洁的群晖交叉编译教程

最近把一个群晖的NAS放在校园网里的时候遇到了锐捷认证的问题,找了一下没有现成的程序可以拿来用,然后自己交叉编译一个mentohust来用。

1.环境

Ubuntu20.04,先去下载目标机器对应的toolchain(就是用来编译目标平台的程序的编译工具套装,gcc、g++、ld和库啥的)。
在群晖的开发工具下载首页,进入DMS相应版本的目录里,比如我的是6.2.3版本,进去DSM 6.2 Tool Chains,然后可以看到有很多对应着不同处理器的压缩包,找和你CPU对应的版本。这个对应关系我没弄全,自己查一下资料,比如,我的是intel的CPU,肯定是intel x86,然后后面是Linux版本,这个要ssh到群晖上看一下:

# uname -a
Linux my-nas 3.10.105 #25426 SMP Wed Jul 8 03:19:42 CST 2020 x86_64 GNU/Linux synology_broadwell_rs3618xs

我这个是3.10.105的,没有这个对应的,所以下了3.10.102的。
复制下载地址,在Ubuntu上:

# wget https://master.dl.sourceforge.net/project/dsgpl/DSM%206.2%20Tool%20Chains/Intel%20x86%20Linux%203.10.102%20%28Broadwell%29/broadwell-gcc493_glibc220_linaro_x86_64-GPL.txz
# tar -Jvxf broadwell-gcc493_glibc220_linaro_x86_64-GPL.txz
# cd x86_64-pc-linux-gnu/bin
# ls
x86_64-pc-linux-gnu-addr2line  x86_64-pc-linux-gnu-cc            x86_64-pc-linux-gnu-elfedit    x86_64-pc-linux-gnu-gcc-ar      x86_64-pc-linux-gnu-gprof   x86_64-pc-linux-gnu-nm        x86_64-pc-linux-gnu-ranlib   x86_64-pc-linux-gnu-strip
x86_64-pc-linux-gnu-ar         x86_64-pc-linux-gnu-c++filt       x86_64-pc-linux-gnu-g++        x86_64-pc-linux-gnu-gcc-nm      x86_64-pc-linux-gnu-ld      x86_64-pc-linux-gnu-objcopy   x86_64-pc-linux-gnu-readelf
x86_64-pc-linux-gnu-as         x86_64-pc-linux-gnu-cpp           x86_64-pc-linux-gnu-gcc        x86_64-pc-linux-gnu-gcc-ranlib  x86_64-pc-linux-gnu-ld.bfd  x86_64-pc-linux-gnu-objdump   x86_64-pc-linux-gnu-size
x86_64-pc-linux-gnu-c++        x86_64-pc-linux-gnu-ct-ng.config  x86_64-pc-linux-gnu-gcc-4.9.3  x86_64-pc-linux-gnu-gcov        x86_64-pc-linux-gnu-ldd     x86_64-pc-linux-gnu-populate  x86_64-pc-linux-gnu-strings
可以看到gcc相关的可执行程序,这时候可以验证一下下的程序对不对,运行一个试试。
然后把bin目录添加到PATH让系统能够找到你的工具链
# export PATH=$PATH:你的工具包的目录/x86_64-pc-linux-gnu/bin

这样基本环境就弄好了,剩下的就是编译你需要的程序。

先去下载别人的源码,然后生成Makefile,别人源码可能会采用采用autogen.sh、bootstrap或者configure,这种项目的根目录里会有一个autogen.sh、bootstrap或者configure文件。如果存在前两者的话,它们就是用来辅助生成configure的,然后再由configure来生成Makefile。有些项目同时带有autogen/bootstrap以及configure,这种一般是预先已经生成了configure文件的,可以先拿它的configure执行下面的步骤,不行的话再执行autogen/bootstrap来重新生成configure。
这时候可能需要安装automake等工具。

# apt-get install autoconf automake libtool

带参数执行configure生成Makefile

# ./configure --host=x86_64-pc-linux-gnu [这里可能还有你的程序的其他配置参数]

其中host就是目标机器平台了,这个对应着工具链bin目录下文件共有的前缀,比如前面ls命令输出的那些gcc之类的,x86_64-pc-linux-gnu是它们的前缀。
configure不出错的话下一步就是执行make进行编译,编译的输出自己去找一下。有些也可以在configure里设置安装目录,然后make完再make install就会安装到设置的目录了。
编译中出现的其他问题,请在google\stackoverflow\github的issues里面找解决办法。

完工


更新
评论区的问题提醒了我增加一些,可能你要编译的项目没有configure这些,直接make就行的,那样就需要在make的时候在参数里指定目标平台:
make CROSS_COMPILE=<前缀>,例如

# make CROSS_COMPILE=x86_64-pc-linux-gnu

或者在你的makefile里面添加,不熟,自己去查。
或者更简单的要直接编译源文件:

# x86_64-pc-linux-gcc main.c

另外,如果目标平台存储空间有限,需要压缩编译出的可执行文件的的大小的话,用x86_64-pc-linux-gnu-strip:

  • strip is often used to remove some symbol table and debug symbol table information from the target file, so as to reduce the size of static library, dynamic library and program.

这玩意在嵌入式的交叉编译中有奇效。

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

超简洁的群晖交叉编译教程 的相关文章

  • python去掉空格常用方式

    前言 xff1a 处理字符串时经常要定制化去掉无用的空格 xff0c python 中要么用存在的常规方法 xff0c 或者用正则处理 1 去掉左边空格 string 61 34 it is blank space test 34 prin
  • 20190226-LCD_GUI

    LCD GUI 这里需要先剃度填色 xff0c 然后再显示汉字 xff0c 最后在显示符号和数字 xff0c 否则会被覆盖 xff0c 显示不出来汉字或者数字符号
  • Arch安装

    从2021年4月起 xff0c Arch Linux安装镜像中已经包含了一个官方的简易安装程序archinstall 可以支持在连接网络后进行英文交互式安装 Arch Linux News Installation medium with
  • 存储过程懂不懂

    存储过程的官方定义是这么说的 xff1a 存储过程 xff08 Stored Procedure xff09 是一组为了完成特定功能的 SQL 语句集 xff0c 经编译后存储在数据库中 用户通过指定存储过程的名字并给出参数 xff08 如
  • ArchLinux的用户配置和KDE安装

    用户配置 建立用户 目标是新建一个普通用户 xff0c 这个普通用户可以使用sudo提权 以下默认使用username作为用户名 建立无密码用户并创立其默认用户组 useradd username 更改账户密码 passwd usernam
  • Zsh的简单配置

    Zsh 简体中文 ArchWiki archlinux org 本配置的目标是增加一些简单的功能以及一个能过得去的界面 安装 安装zsh xff08 本体 xff09 和zsh completions xff08 补全 xff09 两个包
  • Arch(KDE Plasma)中文化

    Localization 简体中文 Simplified Chinese 简体中文 ArchWiki 生成中文locale xff08 这一步在安装篇就有写 xff09 在 etc locale gen中取消中文的zh CN UTF 8 U
  • yay的安装与使用与Anbox的安装

    yay的安装 安装 首先安装所需软件包base devel和git pacman Syu base devel git 之后使用git clone下载代码 git clone URL FORM AUR 这里的 URL FROM AUR 指从
  • linux下利用C语言实现对文件的操作(创建、复制、修改权限、修改文件名)

    今天在ubuntu下编写一个了C程序实现如下功能 xff1a xff08 1 xff09 创建一个文本文件 xff0c 写入 Hello World xff01 xff08 2 xff09 获取该文件的所有权限 xff08 3 xff09
  • 设计模式案例分析与实现

    1 UML类图及Java实现 案例 xff1a 某基于C S的即时聊天系统登录模块功能描述如下 xff1a 用户通过登录界面 LoginForm 输入账号和密码 xff0c 系统将输入的账号和密码与存储在数据库 User 表中的用户信息进行
  • 决策树算法

    目录 1 概述 1 1 算法导入 1 2 决策树定义 1 3 决策树发展 1 4 结构 1 5 从树到规则 2 决策树的构建 2 1 基本原理 2 2 特征选择 2 3 实例分析 ID3 2 4 增益率 C4 5算法 2 5 基尼指数 CA
  • 机器学习——图像分类

    1 图像分类的概念 1 1 什么是图像分类 xff1f 图像分类 xff0c 根据图像信息中所反映出来的不同特征 xff0c 把不同类别的目标区分开来的图像处理方法 1 2 图像分类的难度 任何拍摄情 况的改变都将提升分类的难度 1 3 C
  • 日常开发报错记录

    20230424 python3 7中报错 xff1a No module named typing extensions 在网上找到的解决办法 xff1a pytorch 错误 xff1a No module named typing e
  • 基于C++的通讯管理系统

    1 系统需求 通讯录是一个可以记录亲人 好友信息的工具 本教程主要利用C 43 43 来实现 个通讯录管理系统 系统中需要实现的功能如下 添加联系人 向通讯录中添加新人 xff0c 信息包括 姓名 性别 年龄 联系电话 家庭住址 最多记录1
  • 存储过程进阶(vb.net+SQL Server2008环境)

    写过一篇 存储过程入门 的博客 xff0c 那仅仅是入门 xff0c 下面和大家一起深入学习存储过程 xff08 也许以后还会有更深入 xff09 以经典的注册为例子 xff0c 篇幅有限只写了核心部分 xff0c 其他略过 无参数无返回值
  • 基于C++的职工管理系统

    1 管理系统需求 职工管理系统可以用来管理公司内所有员工的信息 本教程主要利用C 来实现一个基于多态的职工管理系统 公司中职工分为三类 普通员工 经理 老板 显示信息时 需要显示职工编号 职工姓名 职工岗位 以及职责 普通员工职责 完成经理
  • C++提高编程

    本阶段主要针对C 43 43 泛型编程和STL技术做详细讲解 xff0c 探讨C 43 43 更深层的使用 1模板 1 1模板的概念 模板就是建立通用的模具 xff0c 大大提高复用性 例如生活中的模板 一寸照片模板 1 2函数模板 C 4
  • 在卸载东西时,一不小心把window资源管理器给结束,电脑黑屏了。

    今天在卸载东西时 xff0c 有个卸载的残旧文件删除不了 xff0c 显示资源管理器正在使用 xff0c 然后我二话不说直接杀进程去了 xff0c 一不小心将资源管理器的进程给就地正法 xff0c 删完之后电脑直接黑屏 话不多说 xff0c
  • 什么是 JDK?

    JDK 是 Java Development ToolKit 的简称 xff0c 也就是 Java 开发工具包 JDK 是整个 Java 的核心 xff0c 包括 Java 运行环境 xff08 Java Runtime Envirnmen

随机推荐

  • 对《Java编程思想》读者的一点建议

    Java 编程思想 这本书在豆瓣的评分高达 9 1 分 xff0c 但我总觉得有点虚高 记得刚上大学那会 xff0c 就在某宝上买了一本影印版的 Java 编程思想 xff0c 但由于初学 Java xff0c 对编程极度缺乏信心 xff0
  • Caused by: java.lang.NumberFormatException: For input string: "performance-now.js"

    DEBUG 2019 01 08 10 43 53 507 org springframework web servlet DispatcherServlet Handler execution resulted in exception
  • spring mvc执行过程

    springMVC执行的过程 流程如下 xff1a 用户发起请求到前端控制器 xff08 DispatcherServlet xff09 xff0c 该控制器会过滤出哪些请求可以访问Servlet 哪些不能访问 就是url pattern的
  • 如何解决电脑无法访问个别网站

    今天重装系统后 xff0c 将所有的系统软件都安装了最新的版本 xff0c 在上网的过程中 xff0c 发现了一个奇怪的问题 xff0c 电脑可以访问网络 xff0c 但却有很多国内的网站都访问不了 xff0c 换了不同的浏览器测试也是同样
  • Springmvc基础

    springmvc入门 springmvc概述 controller层的框架 xff0c 代替Servlet xff0c 处理请求和响应 springmvc快速入门 64 Controller xff1a 将Bean交给Spring管理 x
  • Ocelot简易教程(五)之集成IdentityServer认证以及授权

    Ocelot简易教程目录 Ocelot简易教程 xff08 一 xff09 之Ocelot是什么Ocelot简易教程 xff08 二 xff09 之快速开始1Ocelot简易教程 xff08 二 xff09 之快速开始2Ocelot简易教程
  • 拿什么拯救你,我的团队

    一向认为软件开发就像是在搭房子或者说是在构建一座宏伟的大厦 xff0c 当然这根据工程的大小而定 其实细细想来软件工程的很多地方都是借助于建筑方面的知识 xff0c 就从 工程 这个词来说就是从建筑学引进的 xff0c 类似的还有设计模式
  • ubuntu开机跳过输入密码登录和默认桌面显示,直接启动图形应用程序,替换默认图形桌面

    1 自动登录 Ubuntu开机自动登录 xff0c 这个应该没什么难点 xff0c 自行百度 2 关闭默认的桌面和设置为自己的图形程序 到 usr share xsessions目录下 cd usr share xsessions ls 可
  • ubuntu服务器修改ssh登录用户名及端口

    1 如果默认的ssh登录用户名为ubuntu xff0c 需要开通root账户 xff0c 添加密码 xff1a passwd root 还需修改配置 xff0c 具体方法 xff1a vi etc ssh sshd config 确保一下
  • SpringBoot 集成 WebSocket 实现服务端消息主动推送

    目录 1 什么是websocket xff1f 2 使用Springboot开始整合webSocket3 前端websocket客户端4 测试验证 项目中用到了websocket进行大屏数据实时获取 xff0c 今天写个聊天室demo来进行
  • mysql authentication_string更改密码不成功的问题

    最近新买了电脑 xff0c 再重新安装mysql过程中 xff0c 发现user字段没有了password字段 xff0c update root密码失败 xff0c 发现最新版本更新为authentication string xff0c
  • vs qt 调试 输出 打印 到输出窗口 或控制台窗口

    printf只能输出 到控制台窗口 一 qt Qt日志重定向 xff08 将qDebug信息输出到界面控件 xff09 wx61a586bb4cf91的技术博客 51CTO博客 Windows版qt中 xff0c 如果是一个控制台应用程序
  • import matplotlib ImportError: cannot import name 'is_string_like'

    Traceback most recent call last File 34 321 py 34 line 2 in lt module gt import matplotlib pyplot as pt File 34 C Progra
  • Java多线程

    一 基础概念 1 CPU核心数和线程数 多核心指的是单芯片多处理器 xff0c 将多个CPU集成到同一个芯片内 xff0c 不同的CPU可以单独的运行程序 目前主流的CPU有四核 六核 八核 增加核心数目的是为了增加线程数 xff0c 一般
  • C++实现人脸识别(百度云平台)

    C 43 43 实现人脸识别 xff08 百度云平台 xff09 项目资源下载 项目思路 xff1a opencv 采集人脸照片 xff0c 将照片发送至百度智能云平台 xff0c 百度云平台与人脸库中的数据进行比较并返回结果 一 项目环境
  • 一文学会用 Docker 和 Docker Compose 部署 Node.js 微服务

    后端业务逻辑一般比较复杂 xff0c 全堆在一个 http 服务里不太现实 xff0c 所以基本都会用微服务架构来开发了 比如这样 xff1a 把不同模块的业务逻辑拆分到不同微服务里 xff0c 然后它们和主服务通过 tcp 通信 xff0
  • c++实现天干地支纪年法

    历史课上 老师 xff1a 1894 xff0c 甲午年 xff0c 中日发生甲午战争 学生 xff1a 家务是什么 xff1f 老师 xff1a 甲午 xff01 天干地支纪年法 学生 xff1a 什么是田赶地址 xff1f 老师 xff
  • 对三层和MVC的认识过程

    三层架构就是 MVC xff01 起初老师总说三层 MVC xff0c MVC 三层架构 所以开始的时候脑子就一个概念 xff1a 三层就是 MVC xff0c MVC 就是三层架构 而且想想也合理啊 xff0c 都是 三 MVC 是三个字
  • Spring入门详解(一)如何配置一个简单的spring项目

    关于spring的一些概念 xff0c 网上已经有很多的说明 xff0c 本系列不会做太多的描述 xff0c 重心在如何配置上 一 准备工作 1 安装JDK xff0c 配置环境 本来不想写这条的 想了想 xff0c 还是写上 2 下载开发
  • 超简洁的群晖交叉编译教程

    超简洁的群晖交叉编译教程 最近把一个群晖的NAS放在校园网里的时候遇到了锐捷认证的问题 xff0c 找了一下没有现成的程序可以拿来用 xff0c 然后自己交叉编译一个mentohust来用 1 环境 Ubuntu20 04 xff0c 先去