精华内容
参与话题
问答
  • 交叉编译

    千次阅读 2019-06-18 10:56:17
    交叉编译 交叉编译及交叉编译器 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译 什么时候需要交叉编译 在一个平台上生成另一...

    交叉编译

    交叉编译及交叉编译器

    在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译

    什么时候需要交叉编译

    1. 在一个平台上生成另一个平台上的可执行代码时
      注意这里的平台,实际上包含两个概念:

      • 体系结构(Architecture
      • 操作系统(OperatingSystem)

      同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行

    参考文章

    [1] Introduction to cross-compiling for Linux

    [2] binutils介绍

    [3] glibc 各个库作用介绍

    [4] uclibc eglibc glibc之间的区别和联系

    [5] Glibc vs uClibc Differences

    展开全文
  • arm交叉编译perl,arm交叉编译openssl,arm交叉编译poco 编译Perl 下载Perl https://www.perl.org/get.html,直接下载Unix版本的源码,不要通过wget下载 下载好后打开目录 tar -xzf perl-5.26.2.tar.gz cd ...

    arm交叉编译perl,arm交叉编译openssl,arm交叉编译poco

    编译成功了,参考的链接有用,我写的目前还不准确,有时间再整理整理。有需要留言

    编译Perl

    下载Perl https://www.perl.org/get.html,直接下载Unix版本的源码,不要通过wget下载
    下载好后打开目录

    tar -xzf perl-5.26.2.tar.gz
    cd perl-5.26.2

    查看Cross/config,里面的ARCH = armOS = linux
    修改Cross/Makefile
    export CROSS=$(ARCH)-$(OS)-
    修改为 export CROSS=/opt/linux/x86-arm/arm-***/target/bin/arm-***-linux-
    使下面变量拼接后,能找到相应的工具

    export CC = $(CROSS)gcc
    export CXX = $(CROSS)g++
    export LD = $(CROSS)ld
    export STRIP = $(CROSS)strip
    export AR = $(CROSS)ar
    export RANLIB = $(CROSS)ranlib

    然后进行配置

    sh ./Configure -des -Dprefix=../perl-***-install
    make
    make test(不需要测试)
    make install

    编译openssl

    参考:http://blog.51cto.com/yiluohuanghun/1118614
    参考:https://hk.saowen.com/a/a06f0f9150fc115bac98d425a4e32a263005d433b28bcd474c5bafdc15f03425
    下载openssl源码https://www.openssl.org/source/
    解压

    tar xvf openssl-1.0.2o.tar.gz

    设置环境变量,设置为绝对路径,设置后,用$CC打印出来,查看是否正确

    export CROSS=arm-linux-gnueabi
    export CC=${CROSS}-gcc
    export LD=${CROSS}-ld
    export AS=${CROSS}-as
    export AR=${CROSS}-ar

    获取补丁

    wget www.linuxfromscratch.org/patches/downloads/openssl/openssl-1.0.2o-compat_versioned_symbols-1.patch

    打开源码文件夹

    cd openssl-1.0.2o

    打补丁

    patch -Np1 -i ../openssl-1.0.2o-compat_versioned_symbols-1.patch

    进行配置,此处编译的是静态库

    ./Configure -DOPENSSL_NO_HEARTBEATS --openssldir=/home/***/***/openssl-1.0.2o-install no-shared os/compiler:/opt/***/arm-linux-gnueabi-gcc 
    (会提示将Configure改为config)
    ./config no-asm no-shared --prefix=/home/iactive/linux/3536/openssl-1.0.2o-install
    (安装写绝对路径,相对路径会失败)
    make
    (单线程编译)
    make install

    编译poco

    展开全文
  • golang交叉编译

    万次阅读 2014-09-25 09:58:26
    golang传的很牛X,但不能交叉编译,对我来说一点用都没有,有个开源项目是用golang写的,如果不能在arm上用,那么我只能将它“翻译”成C,再集成到我的产品中,但我没有这个时间。好在交叉编译最后还是成功了。1. ...

    golang传的很牛X,但不能交叉编译,对我来说一点用都没有,有个开源项目是用golang写的,如果不能在arm上用,那么我只能将它“翻译”成C,再集成到我的产品中,但我没有这个时间。

    好在交叉编译最后还是成功了。

    1. 准备工作

    1.1 golang环境及arm交叉编译工具

    可以参考《golang安装手札》这篇文章。

    1.2 GCC交叉编译器

    在1.1基础上,已经可以编译能在Arm上运行的纯golang写的二进制了,但有一个尚未解决的问题是:golang与C联合开发的模块,编译时报错:

    can't load package: no buildable Go source files in /...

    问题原因在于,关闭cgo的情况下,golang的编译器会自动“忽略”掉带有"import "C""字样的源文件。解决这个问题需要打开cgo的支持,如编译时的命令改为:

    GOARCH=arm CGO_ENABLED=1 go build hello.go

    但这还不够,还需要安装arm平台的编译器,如gcc-4.7-arm-linux-gnueabi(版本号要与目标平台的版本号一致),以及gcc-4.7-multilib-arm-linux-gnueabi的支持。还需要将/usr/bin/gcc重新ln到arm的交叉编译器上。

    完成以上工作后,import "C"就没问题了。

    1.3 第三方库

    使用import "C"的主要目的就是使用第三方开源库,golang查找第三方库使用的是pkg-config,首先要保证pkg-config正常工作;另外,要保证第三方库,及第三方库的依赖库,都是arm版本的,才能正常link成功。链接成功的golang的程序,就可以愉快的在arm板上运行了。

    golang的初步冒险就到些结束了,从下代码到完成这篇blog,用时一天多的时间,我的程序也快乐的在板子上运行中。

    展开全文
  • 本地编译 本地编译可以理解为,在当前编译平台下,编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发,都是属于...交叉编译可以理解为,在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种...

    本地编译

    本地编译可以理解为,在当前编译平台下,编译出来的程序只能放到当前平台下运行。平时我们常见的软件开发,都是属于本地编译:

    比如,我们在 x86 平台上,编写程序并编译成可执行程序。这种方式下,我们使用 x86 平台上的工具,开发针对 x86 平台本身的可执行程序,这个编译过程称为本地编译。

    交叉编译

    交叉编译可以理解为,在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该程序:

    比如,我们在 x86 平台上,编写程序并编译成能运行在 ARM 平台的程序,编译得到的程序在 x86 平台上是不能运行的,必须放到 ARM 平台上才能运行。

    为什么会有交叉编译

    之所以要有交叉编译,主要原因是:

    • Speed: 目标平台的运行速度往往比主机慢得多,许多专用的嵌入式硬件被设计为低成本和低功耗,没有太高的性能
    • Capability: 整个编译过程是非常消耗资源的,嵌入式系统往往没有足够的内存或磁盘空间
    • Availability: 即使目标平台资源很充足,可以本地编译,但是第一个在目标平台上运行的本地编译器总需要通过交叉编译获得
    • Flexibility: 一个完整的Linux编译环境需要很多支持包,交叉编译使我们不需要花时间将各种支持包移植到目标板上
    展开全文
  • 交叉编译学习笔记(一)——交叉编译和交叉工具链
  • nginx交叉编译

    千次阅读 2019-04-23 20:20:32
    nginx开源代码的交叉编译 交叉编译Hi3536上面使用的nginx 交叉编译 nginx ,基于mipsel平台 交叉编译 nginx nginx1.6.3交叉编译成功的代码 nginx 交叉编译 ( 上 ) nginx 交叉编译 (下) 下载 nginx: download zlib ...
  • 交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序, 比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放...
  • 一、交叉编译简介 1、什么是交叉编译 1.1 本地编译  解释什么是交叉编译之前,先要明白一个概念:本地编译  我们之前常见的软件开发,都是属于本地编译:在当前的PC下,x86的CPU下,直接编译出来程序,可以运行的...
  • 上篇介绍了交叉编译的基本原理,以及交叉编译一个简单的HelloWorld程序,这篇将介绍如何交叉编译Qt程序。 由于Qt程序依赖的底层以及第三方的相关库太多(比如libGL.so库为OpenGL库,libX11.so库为系统图像库等等),...
  • 从零搭建交叉编译
  • curl 交叉编译

    2020-05-22 22:23:57
    curl编译以及arm交叉编译 1.安装交叉编译环境, 下载对应的交叉编译器压缩包 2.解压后配置环境变量 $ export PATH=/usr/local/gcc-linaro-linux-gnu/bin:$PATH 3.下载 curl git clone https://github.com/curl/curl ...
  • 一、什么是交叉编译 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行...
  • 交叉编译Nginx

    2019-09-27 22:49:05
    Nginx是个高性能的http和反向...下面就讲述如何交叉编译Nginx。 一 准备 交叉编译平台:ubuntu16.04 64位 目标平台:arm 32位 (对于64位操作方法也是类似) 下载以下文件用于交叉编译: gcc-linaro-4.9.4-2017...
  • 上一篇中按照《嵌入式系统软硬件协同设计实战指南》配置之后发现并不好用,这次按照《xilinx zynq soc与嵌入式linux设计实战指南》进行配置一、基本概念:1、交叉编译:在一个平台上上生成另一个平台上可以执行的...
  • Cmake 交叉编译

    千次阅读 2018-10-30 14:31:20
    交叉编译 最近由Kitware Robot编辑6个月前 页面历史记录 从版本2.6.0开始,CMake支持交叉编译交叉编译意味着该软件是为不同于构建的系统构建的。 这意味着  CMake无法自动检测目标系统  通常,可执行文件不...
  • arm交叉编译

    千次阅读 2017-12-04 18:49:14
    arm交叉编译
  • 嵌入式交叉编译

    千次阅读 2018-08-20 16:18:26
    1、首先将交叉编译工具链添加到环境变量中,执行sudo vi /etc/profile 注:上图中bin/下面的arm…目录下放的是交叉编译工具链,如果不写全的话不能自动补齐。 2、编辑完成后执行source /etc/profile,检查交叉编译...
  • 本文能够避免交叉编译的时出现ZLIB extension requires zlib >=1.09 交叉编译libxml2和zlib,扩展arm-Linux-gcc的lib库。其中libxml2是PHP5安装必须的库文件 1.首先交叉编译zlib。 CC=arm-linux-gcc ./...

空空如也

1 2 3 4 5 ... 20
收藏数 26,310
精华内容 10,524
关键字:

交叉编译