红酒商城网站建设方案,越城区建设和交通运输局网站,网站 一般 用什么空间,wordpress投稿者发附件一、交叉编译 在一个平台上生成另一个平台上的可执行代码。为什么要大费周折的进行交叉编译呢#xff1f;一句话#xff1a;不得已而为之。有时是因为目的平台上不允许或不能够安装所需要的编译器#xff0c;而又需要这个编译器的某些特征#xff1b;有时是因为目的平台上的…一、交叉编译 在一个平台上生成另一个平台上的可执行代码。为什么要大费周折的进行交叉编译呢一句话不得已而为之。有时是因为目的平台上不允许或不能够安装所需要的编译器而又需要这个编译器的某些特征有时是因为目的平台上的资源贫乏无法运行所需要的编译器有时又是因为目的平台还没有建立连操作系统都没有根本谈不上运行什么编译器。 要进行交叉编译我们需要在主机平台上安装对应的交叉编译工具链cross compilation tool chain然后用这个交叉编译工具链编译源代码最终生成可在目标平台上运行的代码。 常见的交叉编译例子如下 1、在Windows PC上利用ADSARM 开发环境使用armcc编译器则可编译出针对ARM CPU的可执行代码。 2、在Linux PC上利用arm-linux-gcc编译器可编译出针对Linux ARM平台的可执行代码。 3、在Windows PC上利用cygwin环境运行arm-elf-gcc编译器可编译出针对ARM CPU的可执行代码。 二、名词解释 Linux下的大多数软件包都使用Autoconf/Automake工具自动生成Makefile只要使用“./configure”“make”“make install”就可以把程序安装到Linux系统中去了。编译第三方源代码时可以看下工程中的readme和install文件一般情况下都会写编译步骤。 1、./configure 常用参数 [--build] | [--host] | [--target] | [--prefix] | [--help] 注意host和--host不是一个意思host是指宿主机即编辑和编译程序的平台是个名词--host是设置执行文件所运行的主机是个动词。 ./configure: 用来生成对应的 Makefile --build: 执行代码编译的主机正常的话就是你的主机系统。若无指定使用host的值 --host: 编译出来的二进制程序所执行的主机, 交叉编译工具链的前缀。因为绝大多数是如果本机编译就本机执行所以这个值就等于build。但是交叉编译的时候build和host需要设置不同值用host指定运行主机即host ! build的时候编译才是交叉编译。若无指定将会运行config.guess来检测 --prefix: 安装目录比如 --prefix/usr 意思是将该软件安装在 /usr 下面执行文件就会安装在 /usr/bin 而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share而不是默认的/usr/local/share --help: 查看参数 --target: 这个参数比较特殊表示需要处理的目标平台名称主要在程序语言工具如编译器和汇编器上下文中起作用若无指定使用host的值。一般用来编译工具比如给arm开发板编译一个可以处理mips程序的gcc,那么--targetmips 举例说明编译gcc ./configure --buildi386-linux --hostarm-linux --targetmipsel-linux --prefix$(pwd)/_install 用i386-linux的编译器进行gcc的编译编译出的gcc运行在arm-linux, 编译结果存放到$(pwd)/_install路径下编译出的gcc用来编译能够在mipsel-linux下运行的代码。 2、Makefile包含了一些基本的预先定义的操作 make: 根据Makefile编译源代码连接生成目标文件可执行文件; make clean: 清除上次的make命令所产生的object文件后缀为“.o”的文件及可执行文件; make distclean: 类似make clean但同时也将configure生成的文件全部删除掉包括Makefile make test / make check: 检查make确保make没有出错一般在make install之前执行 make install: 将编译成功的可执行文件安装到指定目录中一般为/usr/local/bin目录; make dist: 产生发布软件包文件即distribution package。这个命令将会将可执行文件及相关文件打包成一个tar.gz压缩的文件用来作为发布软件的软件包。它会在当前目录下生成一个名字类似“PACKAGE-VERSION.tar.gz”的文件。PACKAGE和VERSION是我们在configure.in中定义的AM_INIT_AUTOMAKE(PACKAGE, VERSION); make distcheck: 生成发布软件包并对其进行测试检查以确定发布包的正确性。这个操作将自动把压缩包文件解开然后执行configure命令并且执行make来确认编译不出现错误最后提示你软件包已经准备好可以发布了; 三、交叉编译源代码 1、环境 Ubuntu 2、树莓派交叉编译工具安装 step1. 下载树莓派交叉编译工具https://github.com/raspberrypi/tools step2. 将源码放到各用户都能share的文件夹下如/usr/tools step3. 将交叉编译工具的路径加到环境变量中为了以后启动不用再设置我加到了/etc/bash.bashrc中 1 $gedit /etc/bash.bashrc2 #在文件的末尾加上 export PATH$PATH:/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
3 $source /etc/bash.bashrc step4. 检测是否安装成功 way1: $arm #双tab 显示以下内容 way2: $arm-linux-gnueabihf-gcc -v
#能显示正确信息$arm-linux-gnueabihf-g -v
#能显示正确信息 注意交叉编译时如果出现arm-linux-gnueabihf-XXX找不到确定arm-linux-gnueabihf-XXX -v 是否能输出正确信息 如果-v显示“No such file or diectory”, 可能是32位/64位兼容问题解决办法 13.10之前版本 //安装32位兼容库1 apt-get install ia32-libs 13.10之后版本 1 $ dpkg --add-architecture i386
2 $ apt-get update
3 $ sudo apt-get install lib32z1-dev
4 $ sudo apt-get install libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 libasound2:i386 libasound2-plugins:i386 gstreamer0.10-pulseaudio:i386 gstreamer0.10-plugins-base:i386 gstreamer0.10-plugins-good:i386 gstreamer0.10-ffmpeg:i386
5 $ sudo apt-get install ia32-libs 三、编译源代码 1、在写编译脚本时一定要确保编译器写的是交叉编译的编译器。比如比较常用的Makefile, 1 demo: $(obj)
2 $(CXX) -o $ $^ $(LDFLAGS) 其中的CXX必须是arm-linux-gnueabihf-g才能编译出正确的在树莓派上的可执行文件。 2、编译第三方库 如果你想设置全局的CC和CXX变量在每次打开一个新的Terminal时输入以下命令 1 $export CCarm-linux-gnueabihf-gcc
2 $export CXXarm-linux-gnueabihf-g 其他的全局变量同上。 以下列几个常用的第三方库交叉编译步骤 1 sqlite3 http://www.sqlite.org/download.html sqlite-autoconf-3081002.tar.gz step1: make clean step2: ./configure --hostarm-linux-gnueabihf --prefix/usr/local/tools/sqlite3 step3: make step4: make install 2curl http://curl.haxx.se/download.html curl-7.43.0.tar.gz step1: make clean step2: ./configure --hostarm-linux-gnueabihf --prefix/usr/local/tools/curl step3: make step4: make install 3 openssl: http://www.openssl.org/source/ openssl-1.0.1p.tar.gz step1: ./config no-asm shared --prefix/usr/local/tools/openssl step2: a、修改Makefile CCarm-linux-gnueabihf-gcc b、找到有-m64的地方将-m64删除。 step3: make step4: make install 转载于:https://www.cnblogs.com/xieyajie/p/4699724.html