① 如何查看ubuntu的源代码
在/usr/src/下面有你的linux的全部源代码,没有耐心和足够的c语言编程经验的话不要去看了
② 如何在Debian或Ubuntu上安装完整的内核源码
你好,在Debian上安装完整的内核源码
在下载内核源码之前,先安装dpkg-dev,其中包含你在Debian上生成源代码时需要的开发工具套件。不仅如此,dpkg-dev中还包含在用来解压Debian源码包并自动打补丁的工具dpgk-source。
$ sudo apt-get install dpkg-dev
然后,运行以下命令下载完整的内核源码。
$ apt-get source linux-image-$(uname -r)
伴随着完整内核源码(linux_X.X.XX.orig.tar.xz)的还有一些可用的内核补丁(linux_X.X.X+XXX.debian.tar.xz)和源码控制文件(linux_XXXX.dsc),这些都将被下载并存储到当前目录。在.dsc文件中会指出如何给内核源码打补丁。
当下载完成,以上的命令将会自动调用工具dpkg-source将下载的内核源码解压到当前的目录中,与此同时根据.dsc文件来下补丁。
最终完整的内核源码树将会以"linux-X.X.XX"的形式呈现在当前目录中。
在Ubuntu上安装完整内核源码
如果你想安装完整内核源码的话,以上在Debian上的那一套做法在Ubuntu上仍然奏效。
在Ubuntu上还有另一套方法安装完整内核源码。事实上,你可以查一下由Canonical为Ubuntu不同发行版维护的内核源码树。
$ sudo apt-get install git
$ git clone git://kernel.ubuntu.com/ubuntu/ubuntu-$(lsb_release --codename | cut -f2).git
③ ubuntu下如何获取源码包和源码
1、在获取源码包之前,确保在软件源配置文件/etc/apt/sources.list中添加了deb-src项 2、使用如下命令获取xxx源码包的详细信息: sudo apt-cache showsrc xxx这用来查询当前镜像站点中是否有该源码包。 3、源码包中通常包含3个文件,分别以dsc,orig.tar.gz和diff.gz为后缀名。 sudo apt-get source xxx 命令来获取源码包,它会将源码包下载到用户当前目录 并在命令执行过程中,调用dpkg-source命令,根据dsc文件中的信息,将源码包解压到同名目录中,应用程序的源代码就在这里面。 sudo apt-get source xxx 要强调的是,在下载源码包前,必须确保安装了dpkg-dev(执行”apt-get install dpkg-dev”来安装), 否则,只会下载源码包的3个文件,但不会解压缩源码包。当然你也可以自己用dpkg-source命令去解压缩源码包。 4、在编译源码包前,需要安装具有依赖关系的相关软件包。使用”apt-get build-dep”命令可以主动获取并安装所有相关的软件包。 sudo apt-get build-dep xxx 5、现在可以来编译源码包了,首先进入源码所在目录,使用dpkg-buildpackage命令来编译源码包,它会将生成的Deb软件包放置在上层目录中。cd xxx sudo dpkg-buildpackage 这样就会编译生成xxx_i386.deb 6、安装软件包。使用”dpkg –i”命令来安装生成的Deb软件包。
④ ubuntu源码编译安装cmake-2.8.10.2
ubuntu源码编译安装cmake-2.8.10.2从cmake官网下载最新的cmake版本,笔者下载的是cmake-2.8.10.2.tar.gz,地址http://www.cmake.org/cmake/resources/software.html
www.dnjsb.com
1、解压cmake-2.8.10.2.tar.gztar
-xvf
cmake-2.8.10.2.tar.gz2、在cmake-2.8.10.2同级目录下新建一个编译目录mkdir
cmake-bulidcd
cmake-build3、编译cmake.././bootstrap
www.dnjsb.com
注意:可能会出现如下错误:/usr/lib/libstdc++.so.6:
version
'GLIBCXX_3.4.15'
not
found这个是因为笔者更新ubuntu
gcc编译器导致的。解决方法:a.
查看libstdc++.so.6支持GLIBCstrings
/usr/lib/libstdc++.so.6
|
grep
GLIBCoutput:GLIBCXX_3.4GLIBCXX_3.4.1GLIBCXX_3.4.2GLIBCXX_3.4.3GLIBCXX_3.4.4GLIBCXX_3.4.5GLIBCXX_3.4.6GLIBCXX_3.4.7GLIBCXX_3.4.8GLIBCXX_3.4.9GLIBCXX_3.4.10GLIBCXX_3.4.11GLIBCXX_3.4.12GLIBCXX_3.4.13GLIBC_2.0GLIBC_2.3GLIBC_2.1GLIBC_2.1.3GLIBC_2.3.2GLIBC_2.2GLIBCXX_FORCE_NEWGLIBCXX_DEBUG_MESSAGE_LENGTH发现里面没有支持GLIBCXX_3.4.15。在这里,笔者ubuntu中安装的gcc
4.7ls
/usr/local/gcc-4.7.2/output:bin
include
lib
libexec
share将/usr/local/gcc-4.7.2/lib/目录下面的libstdc++.so.6和libstdc++.so.6.0.17拷贝到/usr/lib/目录下面:sudo
cp
/usr/local/gcc-4.7.2/lib/libstdc++.so.6
/usr/lib/sudo
cp
/usr/local/gcc-4.7.2/lib/libstdc++.so.6.0.17
/usr/lib/sudo
rm
-f
/usr/lib/libstdc++.so.6.0.13删除libstdc++.so.6旧的链接,建立新的链接,同时删除libstdc++.so.6.0.13:sudo
ln
-sf
/usr/lib/libstdc++.so.6.0.17
/usr/lib/libstdc++.so.6sudo
rm
-f
/usr/lib/libstdc++.so.6.0.13至此搞定,现在我们回到编译cmake中。重复刚才的命令:
www.dnjsb.com
.././bootstrap注意:此时我们仍然在cmake-bulid目录下面。上面成功以后就执行如下2个命令:makesudo
make
install查看cmake是否安装成功:cmake
--versionoutput:cmake
version
2.8.10.2恭喜你,安装成功了。
⑤ 如何使用源代码构建一个可用的 Ubuntu 软件包
用dpkg-source -x
foo.dsc从foo.orig.gz和foo.diff.gz创建工作目录foo:一份发行版中立的源码目录,加上一个debian目录以及目录下的meta文件,就构成了一份可以生成二进制deb包的源码工作目录。其实从apt-get
source抓下来的目录,已经是通过dpkg-source -x解压过的了。dpkg-source
-x所做的主要事情就是1.解压;2.把foo.diff.gz里的patch打到原始文件上。生成的foo目录下的源文件,都已经是打过deb源码包里的patch了的。
在foo目录下,执行dpkg-buildpackage -us
-uc构建包。-us和-uc参数是不做签名,适合于本地构建本地使用的情况。这个命令的输出有两个,一个是二进制deb包,另一个是源码包,为什么这里还要生成源码包?因为你可能改动某些文件,那么会生成新的diff.gz来记录所有你针对原始源码的改动,不管发布还是保存更改都更方便,下一次你只需要在生成的新的.dsc文件上执行dpkg-source -x就可以产生一个一模一样的源码了。如果你什么都没改动,那么新产生的源码包同你构建所来源的源码包是一样的。你也可以用参数-b和-S来控制这次构建只产生二进制包或者只产生源码包。
两个最重要的meta文件,debian/control和debian/rules。control文件决定了哪些二进制包将从这份源码目录中构建,一个源码目录往往是好几个二进制包的输入源。你不想生成哪个屏蔽它就行。二进制包的运行时依赖关系也在包的声明中可见,并且control文件也声明了构建过程中的依赖,不过可以给dpkg-buildpackage传-d参数来忽略构建依赖。
debian/rules文件其实就是个Makefile,你可以执行make -f debian/rules target来单独执行某个目标。rules文件里基本上都是对debhelper脚本函数的调用,像是dh_*这样的函数,它们负责大部分的构建过程。常用的clean, install目标在rules文件中也有,有些基于源码包的Makefile上所做的事情如make clean需要通过make -f debian/rules clean来代替。
和传统意义的Make过程有点不一样的就是,默认状态下,每次dpkg-buildpackage,其实都是把从configure.ac生成configure脚本,到生成Makefile,到构建source,到安装binary都做一遍,哪怕你并没有改过configure.ac,或者改过源代码.c文件,假如构建失败了,就需要尝试改动源代码重新构建,有时候需要反复尝试这个过程直到构建成功,如果包很大的话那需要花费的时间就很长,这时传入-nc参数可以让dpkg-buildpackage保留当前的构建结果,就像传统的make一样只会从出错的地方重新开始。当然,当对源代码的改动终止后,最后还是需要再执行一遍不带-nc参数的命令”dpkg-buildpackage -us -uc”来重新完全构建一遍,否则在生成源码包时可能会出错。
dpkg-buildpackage不用担心它会自动改变你的源文件(即通过dpkg-source
-x产生的文件),当然前提是你确实改动的是”源”文件,比如是configura.ac而不是configure,是dkms.conf.in而不是dkms.conf。
构建软件时做得最多的事就是根据自己系统的需求调整./configure参数了吧,比如–enable–xxx或者–disable-xxx,在rules文件中,通过带override前缀的target可以起到为默认的target定制参数的目的,如override_dh_auto_xconfigure:
对源码包有修改最好通过dch -i来生成一个新的changelog文件,每个change item的title部分都是表示这次change的最新版本号,dpkg-buildpackage的输出二进制包的版本号其实就是从changelog里提取的(不是写在control文件里的)。