LINUX源码(linux 下载 源码)-编程之家

linux一般是怎样进行源码安装的?

比如你想安装无损音乐解码包flac就需要以下几步:

从官网或源码网站上下载源码包:

我一般从

http://packages.debian.org

上下载。

搭建编译环境

这里主要是安装一些编译工具,如gcc(g++)、autoconf、automake、build-essential等

~$ sudo apt-get install gcc g++ autoconf automake build-essential

这里,我早就装过了,所以没有什么多余的安装信息。

解压软件包,并进入源码文件夹

~$ tar -xvf flac_1.3.0.orig.tar.xz

~$ cd flac-1.3.0

根据需要选择合适的编译参数

~$ ./configure –help

(1)这里演示禁用ogg的支持,即选用编译参数 –disable-ogg;

(2)同时将flac库装在用户主目录下的inst文件夹下,即设置参数–prefix=$HOME/inst

编译flac源码

(1)检查编译环境能否完成编译,生成Makefile文件

~$ ./configure –prefix=$HOME/inst –disable-ogg

(2)进行编译

~$ ./make -j $(nproc)

这里多核心的cpu可以通过 -j 选项加速编译过程

(3)安装

~$ make install (安装的目录当前用户有读写权限)或

~$ sudo make install(安装的目录当前用户没有读写权限)

安装完毕,将编译好的库和可执行文件添加到搜索路径中

~$ cd $HOME/inst

~$ export PATH=$HOME/inst/bin:$PATH

~$ export LD_LIBRARY_PATH=$HOME/inst/lib:$LD_LIBRARY_PATH

~$ export PKG_CONFIG_PATH=$HOME/lib/pkgconfig:$PKG_CONFIG_PATH

这里,如果是安装到/usr或/usr/local文件夹内,一般是不需要设置这些参数的。

整个编译安装过程中容易出现问题的地方就是5.(1)(生成Makefile)和5.(2)(编译源码)这两个地方。

5.(1)出的问题一般是:

(1)待编译库的依赖库没有安装。这就必须先安装依赖库

(2)环境变量未设置好,即使依赖库安装了也找不见。这必须设置好LD_LIBRARY_PATH、PATH和PKG_CONFIG_PATH这三个环境变量;或者根据./configure –help中所给定的–with-xxx=/path/to/dependent/library来指定依赖的库

5.(2)出的问题一般是:

(1)有些源码文件编译不过。这要么搜贴查找解决方法,要么放弃编译(实在无能为力),因为这些错误有可能是潜在的或者已经出现的bug。。。

(2)链接时某些库链接不上。这需要在生成Makefile之前设置CFLAGS或CXXFLAGS环境变量来实现,一般为:export CFLAGS=”-I/path/to/some/library’s/include/dir -L/path/to/some/library’s/lib/dir -lsomelibrary”。

源码编译中的库依赖是十分令人头痛的,祝你好运。。。

Linux是开源的,那么如何查看源代码?

Linux的内核源代码可以从很多途径得到。一般来讲,在安装的linux系统下,/usr/src/linux目录下的东西就是内核源代码。

linux代码如何生成apk文件?

1、在linux中安装virtualbox,然后安装安卓系统,再安装apk
2、尝试安装shashlink,这个是安卓的一个模拟库,一般来说,支持x86的安卓的apk才可以运行,只支持arm的不能运行。

如何获取linux下命令源码?

命令的源码是一个软件包为单元的,放在一个软件包的源码中。若要下载一个命令的源码,就要把这个命令所属的软件包的源码都下载下来。命令的源码就在下载的源码的相关文件夹内。一般是src文件夹,对应的主文件名称为cmd.c,当中cmd为详细的命令,如ls命令的主程序文件为ls.c。

因为在不同的Linux发行版上。源码的获取方法并不同样。所以以下以Ubuntu和CentOS这两种经常使用的Linux发行版为样例进行说明。

1、Ubuntu中系统命令源码的获取方法

以32位Ubuntu14.04下,获取ls命令的源码为例,能够使用例如以下的方法下载源码:

1)使用which命令查看ls命令的位置,例如以下:

which ls # 输出:/bin/ls

2)使用dpkg命令查询ls命令所属的包。例如以下:

dpkg -S /bin/ls # 输出:coreutils: /bin/ls

3)使用apt-get命令来下载ls命令所在的包的源码。例如以下:

apt-get source coreutils

注:

1)在使用dpkg时。若出现错误。能够使用sudo命令使其以root权限运行。

2)使用apt-get source下载的源码保存到当前文件夹下。

。此外,当我们知道了命令所属的包后,也能够到对应的官方站点下载。

2、CentOS中系统命令源码的获取方法

以32位CentOS6.6下,获取ls命令的源码为例,能够使用例如以下的方法下载源码:

1)配置源码的源

在CentOS中,源的配置文件为:/etc/yum.repos.d/CentOS-Base.repo,改动该文件须要root权限。

打开该文件,查看该文件的内容,在本人的机子上,该文件的内容例如以下:

# CentOS-Base.repo

#

# The mirror system uses the connecting IP address of the client and the

# update status of each mirror to pick mirrors that are updated to and

# geographically close to the client. You should use this for CentOS updates

# unless you are manually picking other mirrors.

#

# If the mirrorlist= does not work for you, as a fall back you can try the

# remarked out baseurl= line instead.

#

#

name=CentOS-$releasever – Base

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os

#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#released updates

name=CentOS-$releasever – Updates

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates

#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful

name=CentOS-$releasever – Extras

mirrorlist=http://mirrorlist.centos.org/?

release=$releasever&arch=$basearch&repo=extras

#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages

name=CentOS-$releasever – Plus

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus

#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/

gpgcheck=1

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#contrib – packages by Centos Users

name=CentOS-$releasever – Contrib

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib

#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/

gpgcheck=1

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

该文件里有两个变量:releasever和basearch。分别表示release版本号和分支,如本人的机子上,这两个值分别为6和i386。注意。releasever并不会细分为次级版本号。即不会是6.6之类的。

从该文件的内容能够知道,该文件共同拥有5个节。也就是说本人的机子的软件来源有5处,分别为base、updates、extras、centosplus和contrib。所以仅仅须要为例如以下的5处软件源指定其源码的源就可以。在文件的末尾加上例如以下的内容:

name=CentOS-$releasever – Base src

baseurl=http://vault.centos.org/6.6/os/Source/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

name=CentOS-$releasever – Updates src-centos

baseurl=http://vault.centos.org/6.6/updates/Source/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

name=CentOS-$releasever – Extras src-centos

baseurl=http://vault.centos.org/6.6/extras/Source/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

name=CentOS-$releasever – Plus src-centos

baseurl=http://vault.centos.org/6.6/centosplus/Source/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

name=CentOS-$releasever – Contrib src-centos

baseurl=http://vault.centos.org/6.6/contrib/Soruce/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

因为不同的版本号设置会有所不同,所以其设置会有所不同,方法可总结为例如以下:

(1)gpgkey与该文件里已有的节的gpgkey同样

(2)为了确认文件的存在和情况,能够打开站点http://vault.centos.org/查看详细的情况,再依据详细的情况来填写

(3)设置baseurl时须要依据自己的系统的版本号来设置,如本人的机子为CentOS-6.6,则在设置时,相关的參数就设置为6.6。即http://vault.centos.org/后接的子路径为6.6。

该文件的作用是为yum其及相关工作的下载提供一个源。如在使用yumdownloader(以下会讲到)下载源码时。会发生例如以下动作:

(1)下载$baseurl/repodata/repomd.xml文件。若该repomd.xml文件比系统中的新。更新系统中的对应的repomd.xml

(2)下载$baseurl/SPackages/中的对应的源码rpm包。

2)使用which命令查看ls命令的位置,例如以下:

which ls

# 输出:/bin/ls

3)使用rpm命令查询ls命令所属的包,例如以下:

rpm -qf /bin/ls

# 输出:coreutils-8.4-37.el6.i686

4)yumdownloader是一个从RPM源下载RPM的程序,能够使用yumdownloader命令安装源码。例如以下:

yumdownloader –source coreutils-8.4-37.el6.i686

注:

(1)若yumdownloader命令没有安装,则能够使用此命令安装:yum install yum-utils。

(2)下载的文件在当前文件夹下。能够使用參数–destdir指定下载到哪一个文件夹。

5)使用yumdownloader下载到的是一个安装包文件rpm,能够使用例如以下的命令查询rpm中的tar文件:

rpm -qpl coreutils-8.4-37.el6.src.rpm | grep tar

# 输出:coreutils-8.4.tar.xz

6)使用rpm2cpio命令将rpm包文件转换成cpio归档文件,再使用cpio命令,从cpio归档文件复制提取出一个归档文件。出例如以下:

rpm2cpio coreutils-8.4-37.el6.src.rpm | cpio -idv coreutils-8.4.tar.xz

# 输出:

# coreutils-8.4.tar.xz

# 9561 blocks

cpio的man解释为:cpio copies files into an archive

-i:与–extract等同。提取之意

-d:与–make-directories等同,当有须要时创建一个载入文件夹

-v:列出文件的处理过程

7)使用tar命令对coreutils-8.4.tar.xz压缩包进行解压缩,例如以下:

tar -xvf ./coreutils-8.4.tar.xz

至此,命令的源码获取完毕。