linux 编译源码(linux 源码安装步骤详解)
各位老铁们好,相信很多人对linux 编译源码都不是特别的了解,因此呢,今天就来为大家分享下关于linux 编译源码以及linux 源码安装步骤详解的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
如何编译linux源代码
首先uname-r看一下你当前的linux内核版本
1、linux的源码是在/usr/src这个目录下,此目录有你电脑上各个版本的linux内核源代码,用uname-r命令可以查看你当前使用的是哪套内核,你把你下载的内核源码也保存到这个目录之下。
2、配置内核 make menuconfig,根据你的需要来进行选择,设置完保存之后会在当前目录下生成.config配置文件,以后的编译会根据这个来有选择的编译。
3、编译,依次执行make、make bzImage、make modules、make modules
4、安装,make install
5、.创建系统启动映像,到/boot目录下,执行 mkinitramfs-o initrd.img-2.6.36 2.6.36
6、修改启动项,因为你在启动的时候会出现多个内核供你选择,此事要选择你刚编译的那个版本,如果你的电脑没有等待时间,就会进入默认的,默认的那个取决于/boot/grub/grub.cfg文件的设置,找到if ["${linux_gfx_mode}"!="text" ]这行,他的第一个就是你默认启动的那个内核,如果你刚编译的内核是在下面,就把代表这个内核的几行代码移到第一位如:
menuentry'Ubuntu, with Linux 3.2.0-35-generic'--class ubuntu--class gnu-linux--class gnu--class os{
recordfail
gfxmode$linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search--no-floppy--fs-uuid--set=root 9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic root=UUID=9961c170-2566-41ac-8155-18f231c1bea5 ro quiet splash$vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
当然你也可以修改 set default="0"来决定用哪个,看看你的内核在第几位,default就填几,不过我用过这种方法,貌似不好用。
重启过后你编译的内核源码就成功地运行了,如果出现问题,比如鼠标不能用,usb不识别等问题就好好查查你的make menuconfig这一步,改好后就万事ok了。
最后再用uname-r看看你的linux内核版本。是不是你刚下的那个呢!有没有成就感?
Linux中源码编译安装程序包括哪些基本步骤
第一步:创建编译脚本
进入到源码目录执行./configure--prefix=/.../.....(--prefix=后面是想要安装到的目录)
第二部:编译
执行 make
第三部:安装
执行 make install
当然上面这几部都是最基本的步骤,如果想优化编译,要在./configure后面加参数,或者configure之后手动修改Makefile文件如O2(优化等级) FLAGS等编译参数的修改。
--------------------------------------------------------------------------------------------------------------
以上都是源码包的编译
如果是自己写的C代码直接用gcc编译即可。
例如编译test.c
执行 gcc-o test test.c即可将test.c编译为可执行的文件 test
自己打出来的要采纳啊!
linux中源代码包安装的基本步骤是什么
详解linux源码包安装过程
1.解压缩包
可以通过下载或其他方式获得了一个软件包,通常它是一个压缩文件,大部分可能是存档的和压缩的,这些文件一般以.tar.gz为扩展名。
首先拷贝它到一个目录,然后 untar和 gunzip解压它。通常这个命令是
tar xzvf filename [filename是软件文件名称]
解压后的文件一般会在当前目录下的创建子目录,并以这个包名来命名。你也可以用用这个命令预先查看结果 tar tzvf filename,显示包里有那些解压文件。
源文件如果是新的 bzip2(.bz2)格式,可用
bzip2-cd filename| tar xvf-,或更简单的 tar xyvf filename,这很不错的tar命令被不断的完善。
说明:
A:有时候一些文件必须安装在用户的 home目录下,或更多的是在一个固定的目录,比如/,/usr/src,或/opt。所以必须仔细阅读安装包的配置信息。当一个软件包里如果有config和 Makefiles文件则最好去编辑它,这里包括了安装指令和说明。提示:你改变 makefile会导致不同的结果。大部分软件包允许用 make install自动处理安置二进制文件在适当的系统位置。
B:你可能碰到过一些共享文件、shell存档文件、尤其是 Internet上的源码新闻组。它们保留的原因是具有人性化的可读性,并且允许新闻组缓冲并通过它们筛选和剔除出不合格的。它们可能用 unshar filename.shar命令来解压。
C:一些源码存档文件是用非标准的 DOS,Mac或其他压缩的比如:
zip, arc, lha, arj, zoo, rar, and shk.
D:有时候,你可能需要使用一个 patch或显示改变了的 diff文件来升级或修复存档的源码文件。这 doc文件或者 README文件将告诉你怎么去使用。一个很好的命令用标准语法来调用的命令是 patch< patchfile.
2:关于 rpm安装包
一些 Linux用户惧怕通过使用源码来手动安装软件包,不过现在有方便的 rpm和 deb或新格式的 slp包。例如:rpm安装运行平稳又快,作为一个软件安装在某几个有名的操作系统。
作为方便的RPM包也存在很多不好的缺点,例如:
A:要了解软件中更多更详细的内容你必须去在二进制中去了解,而不是rpm包。
B:还有安装一个 rpm包如果需要依赖关系那么安装就可能会导致失败。
C:当 rpm请求你系统中不同版本的库,那么安装将不能继续,除非你为错误的库位置创建连接符号到正确的位置。
说明:必须使用root安装 rpm和 deb。因为它需要必须的写入权限。
最简单的,用命令 rpm-i packagename.rpm和 dpkg--install packagename.deb会自动解包和安装。
3:关于安装 Linux包出现的一些问题及解决方案
假设 make失败有个链接错误:-lX11: No such file or directory,正好在 xmkmf之后已被调用,这可能意味着 Imake不能被完全建立。检查第一部分 Makefile文件的的行是这样:
· LIB=-L/usr/X11/lib
· INCLUDE=-I/usr/X11/include/X11
· LIBS=-lX11-lc-lm
这个-L和-I开关告诉编译器和链接分别在哪里找到 library和 include文件。在这个例子里, X11库应该在/usr/X11/lib目录,且 X11包含文件应该在/usr/X11/include/X11目录里。假如对于你的机器上的这个错误,请处理修改 Makefile并重新再 make。
没有声明涉及的数学库函数,像下列各项:
/tmp/cca011551.o(.text 0x11): undefined reference to `cos'
要修复它,需要明确链接到匹配的库,在 Makefile(看先前的例子)里增加一个-lm到 LIB或 LIBS标记。
用其他方法尝试
仍然失败如果失败,参考下列脚本:
make-DUseInstalled-I/usr/X386/lib/X11/config
这个直接方式的类别相当于。
在少数例子里,用 root运行 ldconfig可能会解决:
# ldconfig更新共享库链接符号。
一些 Makefiles使用你系统里未被承认的库别名。一个例子,构建可能需要 libX11.so.6,但是在/usr/X11R6/lib不存在文件或链接。然而,在那里是 libX11.so.6.1。解决方法是用 root运行ln-s/usr/X11R6/lib/libX11.so.6.1/usr/X11R6/lib/libX11.so.6,接着需要运行 ldconfig。
有一些包需要你安装一个或更多库的升级版本。需要拷贝一个或更多的库到适当的目录里,删除旧的库,重新设置动态链接库。
4:一些其他的问题处理
安装一个shell脚本如果出现:No such file or directory的错误消息。这是可以检查文件权限确定文件事可执行的,并检查文件头确定是否 shell或程序是脚本在指定的位置被调用。一个例子,这个脚本可能是这样开始的:
#!/usr/local/bin/EDEN
如EDEN的实际安装位置是在你的/usr/bin目录,用一个/usr/local/bin替代
这个脚本不能运行有两个方法来纠正!!
A:文件头改成#!/usr/bin/EDEN
B:或增加一个链接符, ln-s/usr/bin/EDEN
5:一个典型的例子 Xloadimage
首先说明下面的例子来源于国外网站的一个技术实例,这里我做了翻译和整理。
这个例子展现一个简单的问题。xloadimage程序对我的图形工具的调整设置是有用的附加。从源码目录拷贝文件,用 tar xzvf解压文件,可是在运行 make的时候出现令人讨厌的错误并停止了。
gcc-c-O-fstrength-reduce-finline-functions-fforce-mem
-fforce-addr-DSYSV-I/usr/X11R6/include
-DSYSPATHFILE=\"/usr/lib/X11/Xloadimage\" mcidas.c
In file included from/usr/include/stdlib.h:32,
from image.h:23,
from xloadimage.h:15,
from mcidas.c:7:
/usr/lib/gcc-lib/i486-linux/2.6.3/include/stddef.h:215:
conflicting types for `wchar_t'
/usr/X11R6/include/X11/Xlib.h:74: previous declaration of
`wchar_t'
make[1]:*** [mcidas.o] Error 1
make[1]: Leaving directory
`/home/thegrendel/tst/xloadimage.4.1'
make:*** [default] Error 2
这个错误消息包含了实质的线索:
查看 image.h文件的 23行:
#include< stdlib.h>
在源码的某处对于 xloadimage, wchar_t已经在指定标准 include文件重新定义。告诉我们首先在 image.h的 23行尝试注释它,或许 stdlib.h include是不存在的,毕竟不是所有都是必需的。
在这点,构建中的收益来源于所有任何一个致命错误。xloadimage现在功能正常。
6:安装 Linux包的一些总结
坚持自己动手处理所有的安装出现的问题,不断总结努力学习,从错误里去仔细研究,努力动手排错,从每个不足甚至失败的地方得到扩充和提升,可以增强安装构建软件的技巧。