64位编译 linux(linux源码编译)
老铁们,大家好,相信还有很多朋友对于64位编译 linux和linux源码编译的相关问题不太懂,没关系,今天就由我来为大家分享分享64位编译 linux以及linux源码编译的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
如何在linux 32位机器编译64位程序
编译64位程序,不一定要编译机器是64位的,但是32位机器默认安装的gcc编译环境还是不能用来编译64位程序。
编译64位程序,需要加上-m64编译器参数,默认安装的gcc已经支持该参数,但是缺少64位机器指令相关的文件,所以不能编译,会出现下面的错误
In file included from/usr/include/features.h:378,
from/usr/include/assert.h:37,
from../../../include/tinyxml/tinystr.h:42,
from../../../src/tinyxml/tinystr.cpp:32:
/usr/include/gnu/stubs.h:9:27: error: gnu/stubs-64.h:没有那个文件或目录
这时候需要安装 gcc所有支持文件 sudo apt-get install gcc-multilib
将会安装下列额外的软件包:
cpp-4.4 g++-4.4 gcc-4.4 gcc-4.4-base gcc-4.4-multilib lib64gcc1 lib64gomp1 libc6-amd64 libc6-dev-amd64 libgcc1 libgomp1
libstdc++6 libstdc++6-4.4-dev
建议安装的软件包:
gcc-4.4-locales g++-4.4-multilib gcc-4.4-doc libstdc++6-4.4-dbg libmudflap0-4.4-dev libgcc1-dbg libgomp1-dbg libmudflap0-dbg
libcloog-ppl0 libppl-c2 libppl7 lib64mudflap0 libstdc++6-4.4-doc
下列【新】软件包将被安装:
gcc-4.4-multilib gcc-multilib lib64gcc1 lib64gomp1 libc6-amd64 libc6-dev-amd64
下列软件包将被升级:
linux64位机器编译32位程序出现错误。
32和 64是完全两个不同的系统。Linux他们的兼容,完全是基于内核的双模式切换功能,但是因为是基于内核的。所以 32和 64的系统函数库就还是没关系。
那么,你编译和运行 32位程序,就需要 64位的函数库接口支撑。同样 64位程序,也需要 64位的函数库提供支撑。
你这个问题,教程只让你装了最基本的编译器环境,但是函数支撑环境全都没有装,肯定是还会提示找不到需要的函数库的。
另外,就算你这个命令装了需要的函数库,也肯定只是装了 64位的函数库,32位库也没有装。那么编译 32位程序也会出现找不到 32位函数库的问题的。
你这个问题,我建议你学习两部分:
1、Linux的依赖关系;
2、Linux的 mutilib相关实现。
我建议,编译 32的程序请用纯 32位系统。64位系统只编译 64位的程序。64位系统只可以运行 32位程序,不要用来编译。Linux里面随便找个程序,就会依赖很多的函数库,这对于编译器调用来说,会很乱的。
如果真的没有空闲机器去单独跑 32位系统了,我建议要么是 chroot环境,要么是用交叉编译。不过注意这两种方式还是需要设置。
64位linux下面的GCC如何编译出一个32位可执行程序
理论上安装支持环境,之后 64位的 gcc编译成 32位程序,就加-m32参数即可。
当然还一个办法是装个 32位的 gcc。
另外,交叉编译也适用于 x86架构。
不过这么编译经常会出现各种问题,所以编译 32位的程序,最好还是用 32位系统。
不一定重装,用 chroot和 setarch命令配合即可弄出一个 32位的子系统。