一、linux源码安装是什么意思?
编译安装可以自己加上特定参数 改变安装路径,支持某些模块等 rpm都是已经设置好,只需要装
二、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 发行版中,一个目标包通常是和依赖包们一起升级或降级的。因为整个包管理是一个生态,各种包之间互相依赖,一个包升级了,依赖它的包都得重新构建,否则会有 ABI 不兼容的风险。
和不使用源代码编译安装软件类似,也不建议下载离线包安装。还有就是把例如 Ubuntu 20.04 的包弄到 Ubuntu 22.04 上安装,把不同发行版的包互相安装,等等,都有同一个风险。
闭源软件的离线包会把大量库打包在一起,勉强不算在内。不过闭源软件也是会出现 ABI 兼容或者库引用问题的,只是在更加大众的发行版上一般看不到。如果发生了,可以通过修补二进制文件或给它创造一个虚拟环境的方式让它正常运行。
如果源代码安装的软件是一个没有动态链接的纯静态程序,那系统环境无论怎么升级都不会影响它。反之,任何一次系统升级,都可能让它运行不起来,这时候就需要你反复手动编译重新安装。如果你能不厌其烦的在自己的桌面电脑上做这种事,那还好。如果你在服务器上发生了这种事儿,就会对线上系统造成影响。
其实源代码安装软件也可以进入包管理之内的,例如 Archlinux 的 ABS,Gentoo 的 Portage。把你的源代码制作成受包管理控制的包,有了编制,同样能在升级的时候自动构建,杜绝 ABI 兼容问题。不过大多数人认为“打包”这种事离自己很遥远,不知道或不敢这样做而已。其实很多打包工根本就不是程序员,并且一些著名的 Linux 发行版的某些包维护质量很差,经常翻车,水平实在一般。与其让这些人控制着你使用的关键软件的升级,不如自己管理,从源代码制作自己的包就是第一步。
所以不存在什么初级程序员这种限定。源代码也有好的安装方式,你们不用罢了。
四、如何修改kali linux镜像源码?
你装kali的时候会会然你选择系统语言的,当然你也可以这样:进入系统设置,然后选择区域和语言,在语言选项卡选择chinese,然后重启电脑
五、linux下如何获取软件源码?
以redhat为例
软件包以rpm结尾的已经打包的文件,我不知道怎么看
但是linux有很多开源的软件,都是以压缩文件形式发布的,如tar,tar。gz。gz2,bz
他们本身就是源码,你可以进行编译安装。
六、Linux下如何编译Android源码~~~?
这个问题已经找到解决方案了,方法如下:
1.在Linux设置文件共享,将项目共享,最好有个密码什么的。
2.在Linux上配置ssh server,用于和编译安卓源码3.Linux mac 通过连接,原因是有线传输比无线的快很多,ping只是0.3左右ms,不影响使用。然后就可以mac编写代码,然后ssh编译什么的,很方便,
七、如何获取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.
#
#
[base]
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
[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
[extras]
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
[centosplus]
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
[contrib]
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处软件源指定其源码的源就可以。在文件的末尾加上例如以下的内容:
[base-src]
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
[updates-src]
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
[extras-src]
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
[centosplus-src]
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
[contrib-src]
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
至此,命令的源码获取完毕。
八、linux unix源码一样吗?
linux unix源码不一样的。Linux和unix分别是两个完全不一样的操作系统,虽然他们在命令行上兼容,同一个软件,可以在linux和unix上面使用,让人觉得他们是一样的,但是它们是两个完全不同的操作系统,所以他们的源码是不一样的,你要分别在两个系统上写程序的话,你会发现他们更多细节上不一样的地方。
九、如何修改linux内核源码并调试?
将修改的代码添加进内核树,然后修改makefile和config文件,从新编译。
十、linux源码可以免费获得吗?
linux操作系统是免费开源操作系统,它的源码是可以免费获得的。
你下载linux系统安装光盘,安装时选择安装源码,安装结束后源码就在/usr/src目录下。
更容易得到的源码是FreeBSD操作系统的,你登录FreeBSD的FTP网站,可以选择从最新版到最老版本的源码。
- 相关评论
- 我要评论
-