当前位置:首页 » 编程软件 » 如何在x86环境下进行交叉编译

如何在x86环境下进行交叉编译

发布时间: 2022-08-08 10:41:00

‘壹’ 能在x86上编译运行在arm的交叉编译器吗

,在进行ARM-linux嵌入式开发时必须在PC机(x86结构)上编译出能够运行在ARM上的程序,然后再将程序下载到ARM中来运行.这就用到了交叉编译器...

‘贰’ 如何交叉编译Python到ARMLinux平台 / 蓝讯

步骤一:部署protoc.exe
1)sudo su ---进入管理模式
//以下操作切换至protobuf文件夹
2)。/configure
3)make
4)make check
5)make install
此时可以查看protobuf文件夹下面的makefile文件,可以查看-build表示的本机环境以及-host表示的编译库的运行环境
我本地的-build=x86_64-apple-darwin12.3.0
-host=x86_64-apple-darwin12.3.0
(这两个参数在后续配置脚本需要用到,与后面脚步的i686-apple-darwin12.3.0以及arm-apple-darwin12.3.0后缀“arm-apple-darwin12.3.0”保持一致)
6)make distclean清理已生成的makefile,为交叉编译配置新makefile做准备

‘叁’ 怎样交叉编译QT程序使之能在目标板上运行!

最主要的还是,你的QT在PC上运行的x86的,最后要换成arm结构的,你得怀疑下你的bin是不是真的是arm架构的。

‘肆’ 如何在 Intel x86 服务器上构建 IBM PowerLinux 应用程序 第2页

环境和配置
测试环境有一个 IBM Flex System® 组成,该系统有多个 IBM Flex System x240 计算节点和两个基于 IBM POWER7 处理器的节点(一个 Flex System p260 和一个 Flex System p460)。出于本项目的目的,我使用一个 Flex system x240 计算节点来交叉编译 Apache httpd 和 Postgresql。构建二进制程序后,我将它们转移到 Flex System p460 计算节点。图 7 显示了 IBM Flex System 测试环境的布局图。
图 7. IBM Flex System 测试环境

以下是我的系统配置、操作系统级别和其他与系统设置相关的信息。
Flex System x240 计算节点
用于交叉编译二进制程序的 Intel 节点仅需要足够的处理能力和内存,以便能够构建 Power 二进制程序。配置如下:
基于内核的虚拟机 (KVM) 管理程序 Red Hat 6.5
32 个处理器
64 GB 内存
IBM Storwize® V7000 存取区域网络 (SAN) 连接磁盘
KVM Guest 系统
Red Hat Enterprise Linux 6.5
4 个处理器
16 GB 内存
一个 virtio 磁盘:100 GB
一个配置为 br0 的虚拟网络接口卡 (NIC)
所有其他 KVM Guest 系统都已关闭,以消除破坏环境的任何可能性。
Flex System p440 计算节点
Flex System p440 计算节点包含多个逻辑分区 (LPAR),其中一个配置为测试服务器。PowerLinux 服务器配置如下:
IBM PowerVM® 来宾
Red Hat Enterprise Linux 6.5
8 个处理器(专用)
32 GB 内存
Storwize V7000 SAN 连接磁盘 (50 GB)
通过虚拟 I/O 服务器 (VIOS) 共享的以太网适配器
LPAR 配置
最小内存:256 MB
目标内存:32 GB
最大内存:64 GB
最少处理器数:8
目标处理器数:8
最大处理器数:32
处理模式:专用
专用内存
虚拟以太网适配器(通过 VIOS 建立)
适配器 ID:2
VLAN ID:1
需要此适配器来激活虚拟服务器:已选择
以下是我运行的其他一些命令:
# ppc64_cpu --frequency
min: 3.56 GHz (cpu 28)
max: 3.56 GHz (cpu 4)
avg: 3.56 GHz
# ppc64_cpu --cores-present
Number of cores present = 8
# sysctl.conf
kernel.sem = 250 32000 32 12288
使用 toolchain 构建应用程序
通常,构建开源发行版的过程是一个迭代过程。如果您很幸运的话,该过程可能已构建完成。不幸的是,因为大多数开源发行版都构建于 x86 服务器之上,所以在尝试为不同架构(比如 IBM Power 架构)构建它们时可能遇到问题。
如果在 Power 上构建开源包时遇到问题,只需在互联网上搜索类似情形,查看这些已报告的问题是否与您的经历密切相关。如果是相关的,那么在大多数情况下,您可以找到如何解决该问题的建议。
对我而言,尽管为配置脚本选择正确参数后,postgresql 很好地构建完成了,但 apache httpd 没那么幸运。接下来的几节将介绍为 Power 架构构建 apache httpd 所需的修复程序。
交叉编译器经验
编写本文时,我使用的交叉编译器版本是一个仅供 IBM 内部使用的版本,它专为修复我在测试期间遇到的一个错误而构建。读者可以下载 AT 7.0-5 版,它是最新的交叉编译器(在发表本文时),拥有接下来的几段中描述的错误的修复程序。
在我尝试交叉编译 apr-1.5.1 源代码发行版时,我看到了以下编译器消息。
"sorry - this program has been built without plugin support"

按照我在互联网上搜索可能的帮助和解决方案的建议,我找到多个链接提到编译器需要使用 “plugin enabled” 选项来构建。我向 toolchain 支持小组报告了此问题,toolchain 维护人员很快就回复了我,为我提供了一个使用 plugin enabled 选项构建的修改版本。请注意,toolchain 的交叉编译器和原生编译器版本都需要使用 plugin enabled 选项构建。我能够在获得拥有该修复程序的 toolchain 版本后继续工作。
这是我使用 PowerLinux toolchain 的第一次经历。
交叉编译 httpd 2.4.3
要交叉编译 Apache httpd,需要使用另外 3 个包。它们是:apr、apr-util 和 pcre。找到下载最新包的位置后,开始使用 toolchain 交叉编译器在 x86 服务器上构建它们。
我构建 apr-1.5.1 时遇到的问题是构建 gen_test_char.o 模块。请参阅 ASF Bugzilla – 错误 51257 了解有关的更多细节。我修改了 Makefile.in 文件(如下所示)并运行 buildconf 脚本,以便将更改包含在配置脚本中。
对 Makefile.in 的修改如下所示:
[root@stgisv240 apr-1.5.1]# diff -u Makefile.in ../../apr-1.5.1/Makefile.in
--- Makefile.in 2014-03-17 10:10:26.000000000 -0500
+++ ../../apr-1.5.1/Makefile.in 2014-07-03 13:36:11.125013781 -0500
@@ -46,7 +46,6 @@

CLEAN_TARGETS = apr-config.out apr.exp exports.c export_vars.c .make.dirs build/apr_rules.out tools/gen_test_char@EXEEXT@ - tools/gen_test_char.o tools/gen_test_char.lo \
include/private/apr_escape_test_char.h
DISTCLEAN_TARGETS = config.cache config.log config.status include/apr.h include/arch/unix/apr_private.h @@ -132,10 +131,9 @@
make_tools_dir:
$(APR_MKDIR) tools
-OBJECTS_gen_test_char = tools/gen_test_char.lo $(LOCAL_LIBS)
-tools/gen_test_char.lo: make_tools_dir
-tools/gen_test_char@EXEEXT@:$(OBJECTS_gen_test_char)
- $(LINK_PROG) $(OBJECTS_gen_test_char) $(ALL_LIBS)
+tools/gen_test_char@EXEEXT@: make_tools_dir
+tools/gen_test_char@EXEEXT@: tools/gen_test_char.c
+ $(BUILD_CC) $(CFLAGS_FOR_BUILD) $< -o $@
include/private/apr_escape_test_char.h: tools/gen_test_char@EXEEXT@
$(APR_MKDIR) include/private
修改 Makefile.in 文件后,我运行 buildconf 来创建了一个新配置脚本。下一段将介绍用于配置脚本的参数和变量。顺便说一下,我是根据其他尝试在其他平台(比如 ARM)上交叉编译 Apache httpd 及其组件的开发人员的建议,为配置脚本选择配置参数的。
以下是我在 x86 服务器上运行 apr-1.5.1 组件的配置脚本时,使用的参数和环境变量。
# Config script using Power Linux toolchain on x86
BUILD_CC=gcc
CC_FOR_BUILD=gcc
CC=powerpc64-linux-gcc
CPP=powerpc64-linux-cpp
AS=powerpc64-linux-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
CXX=powerpc64-linux-c++
LD=powerpc64-linux-ld
STRIP=powerpc64-linux-strip
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/tmp/usr/local/apr --host=powerpc64-linux ac_cv_file__dev_zero=no
ac_cv_func_setpgrp_void=no apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1
BUILD_CC=gcc make install
我在 Power 服务器上了略加修改的相同发行版。请注意,用于 Power 服务器的 PowerLinux toolchain 使用了具有类似命名的可执行程序,比如从原生 cpp 和 binutils 包安装的 cpp 和 ld。修改脚本中的 CPP 和 LD 变量,如下所示。确保 Power toolchain 的路径首先传入您的 PATH 环境中。
以下是我在 Power 服务器上运行 apr-1.5.1 的配置脚本时使用的参数和环境变量。
# Config script using PowerLinux toolchain on Power
BUILD_CC=gcc
CC_FOR_BUILD=gcc
CC=powerpc64-linux-gcc
CPP=cpp # Note the difference
AS=powerpc64-linux-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
CXX=powerpc64-linux-c++
LD=ld # Note the difference
STRIP=powerpc64-linux-strip
#CFLAGS="-mcpu=440fp -mtune=440fp --sysroot $SYSROOT"
#LDFLAGS=-L$SYSROOT/lib
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/home/usr/local/apr ac_cv_file__dev_zero=no
ac_cv_func_setpgrp_void=no apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1
ac_cv_struct_rlimit=yes
BUILD_CC=gcc make install
以下是我在 x86 服务器上运行 apr-util-1.5.3 组件的配置脚本时使用的参数和环境变量。
# Configure script for apr-util-1.5.3 on x86
BUILD_CC=gcc
CC_FOR_BUILD=gcc
CC=powerpc64-linux-gcc
CPP=powerpc64-linux-cpp
AS=powerpc64-linux-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
CXX=powerpc64-linux-c++
LD=powerpc64-linux-ld
STRIP=powerpc64-linux-strip
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/tmp/usr/local/apr --host=powerpc64-linux --with-
apr=/tmp/usr/local/apr ac_cv_file__dev_zero=no ac_cv_func_setpgrp_void=no
apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1
以下是我在 Power 服务器上运行 apr-util-1.5.3 组件的配置脚本时使用的参数和环境变量。
# Configure script for apr-util-1.5.3 on Power
BUILD_CC=gcc
CC_FOR_BUILD=gcc
CC=powerpc64-linux-gcc
CPP=cpp
AS=powerpc64-linux-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
CXX=powerpc64-linux-c++
LD=ld
STRIP=powerpc64-linux-strip
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/home/usr/local/apr --host=powerpc64-linux --with-
apr=/tmp/usr/local/apr ac_cv_file__dev_zero=no ac_cv_func_setpgrp_void=no
apr_cv_tcp_nodelay_with_cork=no ac_cv_sizeof_struct_iovec=1
以下是我在 x86 服务器上运行 httpd 组件的配置脚本时使用的参数和环境变量。
# Configure script for httpd 2.4.3 on x86
CC_FOR_BUILD=gcc
CC=powerpc64-linux-gcc
CPP=powerpc64-linux-cpp
AS=powerpc64-linux-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
CXX=powerpc64-linux-c++
LD=powerpc64-linux-ld
STRIP=powerpc64-linux-strip
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/tmp/usr/local --host=ppc64 ap_cv_void_ptr_lt_long=no --with-
pcre=/tmp/usr/local/bin/pcre-config --with-apr=/tmp/usr/local/apr --with-mpm=worker--
with-apr-util=/tmp/usr/local/apr/bin/apu-1-config
以下是我在 Power 服务器上运行 httpd 组件的配置脚本时使用的参数和环境变量。
# Configure script for httpd 2.4.3 on Power
CC_FOR_BUILD=gcc
CC=powerpc64-linux-gcc
CPP=cpp
AS=powerpc64-linux-as
#ASCPP=powerpc-apm-linux-gnu-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
#CXXCPP=powerpc-apm-linux-gnu-cpp
CXX=powerpc64-linux-c++
LD=/opt/at7.0-5-rc1/bin/ld
STRIP=powerpc64-linux-strip
#CFLAGS="-mcpu=440fp -mtune=440fp --sysroot $SYSROOT"
#LDFLAGS=-L$SYSROOT/lib
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/home/usr/local --host=ppc64 ap_cv_void_ptr_lt_long=no--with-
pcre=/home/usr/local/bin/pcre-config --with-apr=/home/usr/local/apr --with-mpm=worker--
with-apr-util=/home/usr/local/apr/bin/apu-1-config
交叉编译 PostgreSQL 9.4.3
不同于之前构建 httpd 所需的源代码发行版,我在交叉编译 PostgreSQL 时未遇到问题。PostgreSQL 是使用以下配置脚本来构建的。
以下是我在 x86 服务器上运行 PostgresSQL 的配置脚本时使用的参数和环境变量。
# Configure script for postgresql-9.3.4 on x86
CC=powerpc64-linux-gcc
CPP=powerpc64-linux-cpp
AS=powerpc64-linux-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
CXX=powerpc64-linux-c++
D=powerpc64-linux-ld
STRIP=powerpc64-linux-strip
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/tmp/usr/local --host=powerpc64-linux --without-readline --without-zlib
与 Apache 配置脚本一样,您可以注意到针对 Power 服务器 toolchain 使用了具有类似命名的可执行程序,比如从原生 cpp和 binutils 包安装的 cpp 和 ld。修改脚本中的 CPP 和 LD 变量,如下所示。确保 toolchain 的路径首先传入您的 PATH 环境中。
以下是我在 Power 服务器上运行 PostgresSQL 的配置脚本时使用的参数和环境变量。
# Configure script for postgresql-9.3.4 on Power
CC=powerpc64-linux-gcc
CPP=cpp
AS=powerpc64-linux-as
AR=powerpc64-linux-ar
RANLIB=powerpc64-linux-gcc-ranlib
CXX=powerpc64-linux-c++
LD=powerpc64-linux-ld
STRIP=powerpc64-linux-strip
export CC CPP AS ASCPP AR RANLIB CXXCPP CXX LD STRIP CFLAGS LDFLAGS CC_FOR_BUILD
./configure --prefix=/home/usr/local --host=powerpc64-linux --without-readline --without-zlib
结束语
toolchain 交叉编译器的实际价值在于,开发人员可在他们熟悉的开发平台上(在大多数情况下是 x86)编译和构建 Power Architecture 应用程序。从我们的用例中可以看到,toolchain 可生成像原生编译的应用程序一样高效地执行的二进制可执行程序和库。而且,交叉编译的库与原生编译的应用程序兼容。最后但同样重要的是,交叉编译的应用程序可在本地调试以及使用 gdb 调试器远程调试。
PowerLinux toolchain 与在 x86 平台上使用原生 Linux toolchain 没什么不同。希望本文能让读者很好地了解 PowerLinux toolchain 的特性和功能。

‘伍’ 如何交叉编译sqlite

一、首先到http://www.sqlite.org/download.html下载Linux版本的源码:sqlite-autoconf-3130000.tar.gz。

二、解压:tar xvzf sqlite-autoconf-3130000.tar.gz

三、进入解压后的目录:$ cd sqlite-autoconf-3130000

四、执行:./configure CC=/opt/poky/1.6.1/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc --host=arm-linux --prefix= /usr/tmp/

说明:CC赋值为嵌入式开发环境所使用的交叉编译工具,--host指定软件运行环境为arm-linux, --prefix指定源码交叉编译后生成文件的路径。

五、执行 sudo make && make install

六、将在 /usr/tmp/lib 目录下生成的 libsqlite3.so libsqlite3.so.0 libsqlite3.so.0.8.6三个so文件拷贝的,嵌入式开发环境的/lib/目录 或者程序运行依赖的lib目录下即可。

将/usr/tmp/bin 目录下的 sqlite3 应用程序拷贝到嵌入式开发环境下就可以运行并创建数据库了。

七、编译程序 需要加上 -l sqlite3 这个链接选项。

‘陆’ linux交叉编译的问题,求高手解答

这个问题我也遇到过,你用的是ubuntu吧。。。
建议:使用ubuntu自带的交叉编译工具
安装方法:sudo apt-get install gcc-4.6-arm-linux-gnueabi gcc-4.6-arm-linux-gnueabi-base
这样你就可以使用交叉编译命令了。
*如果是fedaro 可以使用yum search arm-linux- 来查找交叉编译器的版本,找到适合自己下载即可。。。(注意下载后执行指令的路径,因为在移植文件系统的时候会用到交叉编译器的指令系统)

这样说清楚了吗?

热点内容
服务器配置外网地址查询 发布:2024-05-09 09:22:31 浏览:655
win系统如何组建sip服务器 发布:2024-05-09 08:52:21 浏览:278
基于图像匹配算法 发布:2024-05-09 08:35:32 浏览:28
编译安卓内核源码 发布:2024-05-09 08:22:32 浏览:184
骑砍二霸主怎么连接联机服务器 发布:2024-05-09 08:21:58 浏览:546
c语言引用参数 发布:2024-05-09 08:21:58 浏览:251
怎么查看服务器流量 发布:2024-05-09 08:12:34 浏览:879
不用压缩泵 发布:2024-05-09 08:12:33 浏览:850
硬盘存储容量发展速度 发布:2024-05-09 08:06:47 浏览:786
微信在哪里密码锁 发布:2024-05-09 08:01:27 浏览:282