导航:首页 > 源码编译 > 交叉编译的程序在linux上如何执行

交叉编译的程序在linux上如何执行

发布时间:2022-07-26 03:23:30

⑴ 在嵌入式linux中,可以直接编译并运行程序吗

当然可以。理论上,你只需要在平台中有一个可以跑的编译器(准确说环境比较合适吧。。),可以把你的代码翻译成平台可以运行的格式,那么就行了。。理论上,你甚至自己可以做一个
“编译器”,如何在嵌入式系统中,把你的某个代码,比如:“主函数**打印
¥我爱XXX¥退出”翻译成你的平台可以执行的格式,然后运行。。。^_^,起码我是这样理解的。但是MS还没有人这样做。原因可能主要是几个:1.嵌入式平台的资源有限。2.目前MS在里面搭一个合适的开发环境,无疑是很痛苦的事情。

⑵ 如何建立Linux交叉编译环境

最近有很多朋友在探讨关于建立Linux交叉编译环境的问题,下面就一些问题作一个说明,以期抛砖引玉。
基于Linux操作系统的应用开发环境一般是由目标系统硬件(开发板)和宿主PC机所构成。目标硬件开发板用于运行操作系统和系统应用软件,而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主PC机来完成(所以称为交叉编译)。双方之间一般通过串口,并口或以太网接口建立连接关系。
但在此我建议构建如下的交叉编译环境,适合个人或研发小组使用:单独拿出一台PC机(PII以上即可,就用以前淘汰的旧机器就可以),在该PC上安装桌面的Linux操作系统(如Red
Hat
Linux
8.0及以上),可以采用默认的安装选项(注意要包含FTP服务),这台PC作为Linux服务器,除管理员以外,一般不直接让其他人去操作。
将该Linux服务器接入局域网,并新建一些合法用户,以便其他的PC机(在此我们将其称为工作站)的合法用户能访问到Linux服务器。而其他的PC机(工作站)仍然使用Windows操作系统,原来干啥继续干啥。
需要的软件工具包括:
1、FTP客户端程序(如Cuteftp,可到网上下载)。
2、Telnet工具(如SecureCRT,可到网上下载)。
3、移植到某一特定ARM平台的Linux操作系统内核源码(一般由销售商整理提供)。
4、GNU编译工具,可由相关网站下载,或由销售商整理提供。
在工作站安装:在某工作站PC上安装FTP客户端程序和Telnet工具,安装完毕后应该可以在该工作站PC和Linux服务器之间进行文件的传输,并在工作站PC可以通过Telnet登陆到Linux服务器(可能需要将Linux服务器的防火墙服务关闭才能完成)。
在Linux服务器安装:将工作站PC上的Linux操作系统内核源码压缩包和GNU编译工具通过FTP传送到Linux服务器的某个目录(如合法的用户目录),然后在该目录下解压,并将GNU编译工具安装到默认的工作目录即可,以上工作通过在工作站PC使用Telnet工具完成,而不需要在Linux服务器上进行。
Linux操作系统内核的编译:Linux操作系统内核的编译一般有一个比较固定的步骤,会根据MakeFile文件的不同而略有差异,可参考相关文档,编译的工作在工作站PC使用Telnet工具完成。
按固定的步骤编译内核完成以后,会在相应目录生成可执行的二进制文件,通过FTP将该可执行的二进制文件传回工作站PC,然会再通过ADS或SDT下的烧写工具写入开发板的Flash即可。
(T004)

⑶ 请问linux中是怎样对应用程序进行交叉编译的,交叉编译环境已经搭建好了,就是不知道具体怎么做

把makefile 里gcc 改成 arm-llinux-gcc ar 改成 arm-linux-ar ,如果有 configure文件 ,./configure --target = arm-linux-

⑷ 如何使Linux在交叉编译工具安装配置并立即生效

#tar xvzf arm-linux-gcc-4.3.2.tar.gz -C /
(需要注意的是,在大写字母后面有一个空格)
第二、利用vi编辑器打开/etc/profile文件,并在下面的位置中添加一句话:pathmunge /opt/FriendlyARM//opt/FriendlyARM/toolschain/4.4.3/bin
(注意:该处的/opt/FriendlyARM//opt/FriendlyARM/toolschain/4.4.3/bin根据各人的交叉编译工具解压后所存放的位置而不同)
#vim /etc/profile
# Path manipulation
if [ $EUID = 0 ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
pathmunge /opt/FriendlyARM//opt/FriendlyARM/toolschain/4.4.3/binfi第三、执行下列的命令即可是刚才的配置生效
#source /etc/profile
最后你就可以检测自己的交叉编译环境是否安装成功。可以输入下面的命令来检查:

⑸ 如何在32位linux下进行交叉编译

1. 下载源文件、补丁和建立编译的目录 2. 建立内核头文件 3. 建立二进制工具(binutils) 4. 建立初始编译器(bootstrap gcc) 5. 建立c库(glibc) 6. 建立全套编译器(full gcc)

⑹ 如何在linux中运行交叉编译的程序

这里需要注意的是所谓平台,实际上包含两个概念:
体系结构(Architecture)、操作系统(Operating
System)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。
方法及步骤:
1、搭建交叉编译环境
选...

⑺ linux arm 交叉编译怎么使用

交叉编译器通常以 arm-none-linux-gnueabi.tar.bz2 这样的名称发布(不同厂家的不同开发平台,交叉编译工具链的实际名称可能有所差别,请以实际为准),解压命令: vmuser@Linux-host: ~$ tar xjvf arm-none-linux-gnueabi.tar.bz2 如果希望解压...

⑻ 如何交叉编译python到ARM-Linux平台

编译sqlite

先去 http://www.sqlite.org/download.html 下载最新的sqlite源代码,我这里用的是3.5.6版本的。

我推荐使用amalgamation版本的源代码,这个代码只有几个文件而已,编译起来方便,而且据说 编译器好的话,还可能编译出更高效的代码。 我下载的是

[plain]
view plain

http://www.sqlite.org/sqlite-amalgamation-3.5.6.tar.gz

先运行以下几步:

[plain]
view plain

tar zxf sqlite-amalgamation-3.5.6.tar.gz
cd sqlite-3.5.6
./configure --host=arm-linux --prefix=/usr/local/arm/3.3.2 --enable-shared --disable-readline --disable-dynamic-extensions

以上是把sqlite解压缩,然后做一些配置,这里,我希望sqlite到时候安装到/usr/local/arm/3.3.2里,要生成动态链接库,不要readline,不要sqlite的动态扩展。

然后编辑Makefile,把CFLAG和CXXFLAG中的-g去掉,我们不用debug sqlite。

接下来就可以编译和安装sqlite了:

[plain]
view plain

make
make install

这一步就完成了sqlite的编译和安装了。

编译python

先去http://www.python.org/download/下载最新版本的python源代码,我这里下载的是:

[plain]
view plain

http://www.python.org/ftp/python/2.5.1/Python-2.5.1.tar.bz2

先把python解压缩:

[plain]
view plain

tar jxf Python-2.5.1.tar.bz2
cd Python-2.5.1

编译pc版本的语法解析器

由于在编译python的时候,需要先编译一个叫pgen的程序出来,用于生成语法解析器,所以我们要先生成一个pc版本的pgen:

[plain]
view plain

mkdir build.pc
cd build.pc
../configure
make Parser/pgen

然后ls Parser一下,应该就能看到有pgen了。

修改configure

configure在检测编译器的printf是否支持%zd的时候,如果发现是在cross compile,就直接不干活了。这还了得?

把这一部分的检测代码去掉。这段代码起始于

[plain]
view plain

echo "$as_me:$LINENO: checking for %zd printf() format support" >&5
echo $ECHO_N "checking for %zd printf() format support... $ECHO_C" >&6
if test "$cross_compiling" = yes; then

结束于

[plain]
view plain

cat >>confdefs.h <<\_ACEOF
#define PY_FORMAT_SIZE_T "z"
_ACEOF

else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5

( exit $ac_status )
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi

把这两段以及中间的内容都删除掉就可以了。

编译arm版本的python

有了语法解析器,就可以开始编译arm版本的python了。

[plain]
view plain

mkdir ../build.arm
cd ../build.arm
../configure --prefix=/home/leojay/test/arm-system-working/rootfs --disable-ipv6 --host=arm-linux --enable-shared

先创建一个用于编译的目录build.arm,再对python做一些配置,如安装目录,不要ipv6,使用arm-linux的编译器,生成动态链接库。

修改Makefile

之后就要对Makefile做一些修改,把

[plain]
view plain

OPT= -DNDEBUG -g -O3 -Wall -Wstrict-prototypes

一行中,去掉-g,我们不要debug python,-O3改为-O2,空间紧张O2就可以了。



[plain]
view plain

PGEN= Parser/pgen$(EXE)

一行的下面加上

[plain]
view plain

PGEN_HOST= ../build.pc/Parser/pgen$(EXE)

表明我们在HOST上运行的pgen

在要使用PGEN的地方改为PGEN_HOST:

[plain]
view plain

$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
-$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)

改为:

[plain]
view plain

$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
-$(PGEN_HOST) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)

修改所有使用新生成的python的地方。

所有如 ./$(BUILDPYTHON) 的地方,都改为python

如:

[plain]
view plain

platform: $(BUILDPYTHON)
$(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform

改为

[plain]
view plain

platform: $(BUILDPYTHON)
$(RUNSHARED) python -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform

这种地方比较多,大家小心修改。

修改setup.py

setup.py负责编译python的各个扩展模块。但是,由于python完全没有考虑cross compile,所以要做一些修改。

PyBuildExt类:

函数的前两行是把/usr/local加到搜索目录中,我们的cross compiler一般不会直接安装在 /usr/local里面的,所以这两行去掉:

[plain]
view plain

lib_dirs, inc_dirs的设定中,把中括号里的那些都去掉。 以下所有模块都不要:
这个函数在编译了所有的extension后,会去load这些刚编译好的extension, 但我们在i686的电脑上显然不能load,所以要跳过这些操作。 在 build_ext.build_extension(self, ext)后面直接写一个return,不做load。
for d in ['/usr/local/arm/3.3.2/include']
for d in inc_dirs + sqlite_inc_paths:
ssl, openssl, bdb, dbm, termios, nsl, ncurses, bz2, linuxaudiodev, ossaudiodev, tkinter
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
build_extension函数:
detect_moles函数:
cmath, ctypes, _testcapi, pwd, grp, spwd, mmap, audioop, imageop, rgbimg, readline,

[plain]
view plain

由于python本身的问题,现在ctypes还不能在除i386以外的机器上运行,所以ctypes也去掉 编译sqlite的地方:

[plain]
view plain

改为:

[plain]
view plain

因为我的sqlite3安装在这里,如果这里不改的话,setup.py会在我的电脑上找sqlite

main函数:
setup函数调用的时候,把要安装的scripts那一部分去掉

之后就可以make && make install了。

附上我修改后的 Makefile 和 setup.py 供大家参考

裁减python

python完全安装后,实在是很大,所以,要把一些肯定用不上的库去掉。 所以,再附上我的裁减脚本 cleanpy.sh

注意,由于我的python程序都运行在python -OO的参数下,所有的.py和.pyc都不需要, 只要有.pyo就可以了。所以,这个脚本会把所有的.py和.pyc都删除掉。

大家可以根据自己的需要做调整。

⑼ 如何交叉编译node.js到armv7的linux下

最先用avr写。包括启动程序,内核,文件系统。 如果uboot已经写进去了,那么以后可以配置好uboot和nfs, 直接启动到uboot状态,通过uboot的命令和网络进行烧写内核和fs。

阅读全文

与交叉编译的程序在linux上如何执行相关的资料

热点内容
安卓qq分享屏幕怎么分享电视声音 浏览:933
云之家程序员 浏览:623
怎么让表格中的名称生成文件夹 浏览:184
网页控制单片机需要哪些js文件 浏览:670
类似7z002的压缩文件如何解压 浏览:561
移动dsn服务器地址 浏览:691
90后女性嫁给程序员 浏览:304
fcm算法原理 浏览:805
上海兴力压缩机 浏览:701
什么app可以推送小区 浏览:594
韩国解压视频网站 浏览:621
做库管用什么app 浏览:35
pdf转dwg怎么转 浏览:55
单片机微小电阻测量 浏览:138
表格25兆怎么压缩 浏览:69
java开发公司的 浏览:131
东风天锦压缩车工作指示灯不亮 浏览:985
剑侠情缘1源码 浏览:532
cad2011怎么转换成pdf格式 浏览:966
传祺gs5安卓车机如何还原车机 浏览:900