Linux 下的软件为什么很多需要编译,而不是直接发布二进制代码?

各个发行版的linux内核都是一样的,但是为什么很多软件、库(例如OpenCV)安装的时候都需要在本地编译源码,产生二进制代码然后运行,而不是直接发布二进制代码?


因为不同的发行版乃至不同的版本库不同 而应用程序往往也会依赖很多别的库 发布源码比较省事
而且LINUX下也有使用源码编译然后使用这个软件的传统 这让人感觉更安心(比如我 UBUNTU源里没有的东西 我就更乐意从源码编译安装)


当然一个流行的项目往往自己或者第三方会发布针对不同发行版的安装包 乃至软件源(提供源比较方便 一次安装 更新什么都由系统包揽了)


还有些给第三方软件使用的帮助其向用户提供软件源的服务 例如UBUNTU PPA或者
openSUSE Build Service 开发者可把源码提交上去 那边自动给编译并提供源给客户

最后是广告  gdbt - GDB for KGTP 你可以看到我在这里向 客户提供了 
Ubuntu CentOS, Fedora, Mandriva, RHEL, SLE, openSUSE 的源 还提供静态编译好的二进制源码(用来覆盖其他系统) 还提供了源码下载编译的步骤

pansz欢迎评论

一般来说,是工作量导致。对程序员来说,直接的产出就是源代码,直接把源代码扔给你是『最省事』的方式。而且鉴于一些开源协议的关系,很多 Linux 程序是必须发布源代码才合法的。所以,发布源代码是必须的,二进制代码是可发布可不发布的,你说我该怎么做?既然做开源不是为了赚钱,就让自己省事点。

要说『用户体验』的事吧,严格的说来,这些开源软件生产出来的目的并不单纯是提供给最终用户使用,而更重要的是『寻找其他的潜在开发者合作』,以及提供给『发行版的打包人员』。

对于其他的潜在开发者来说,你肯定得把源代码扔给他。对于发行版的打包人员来说,你也得把源代码扔给他。所以从原创开发者的角度,扔源代码就够了。

至于为什么不编译二进制?这个你要问你的发行版了。你可以向你的发行版申请打包该软件的,如果这个软件有人愿意维护,他们会解决好这一切。关于这一点可参考  @skydiver 所说的,其实在每个发行版中制作二进制包都有不小的代价和额外的工作,而制作所谓通用版二进制包更得耗费额外的代价,通常开发团队自己是不会花精力做这些事情的。

——如果很不幸,太多的你需要的软件在这个发行版都没打包好的二进制版本,那么你是不是可以考虑换个发行版了? 显示全部
4

知乎用户,Archer 一名

收起
即使内核是一样的,也没法保证系统中依赖库的版本不一样,这样也就无法保证二进制包能正常运行。所以大部分开源软件都是直接提供源代码的。

另外发行版是会提供二进制包管理器来直接安装编译好的二进制包的。所以说不提供二进制包也不科




这是由于Linux系统的程序相互信赖造成的。比如某个程序依赖于其它一些库,而且版本也有要求,要想直接用,需要在编译时对信赖关系进行调整。./configure就是起这个作用的。

RPM包,DEB包是二进制了,也有依赖,一般情况下,二进制包只对应着特定的发行版。因为,在特定的发行版中,库之间的信赖关系是固定的。比如想把redhat5.2的rpm包安装到fedora上,就不一定成功。

初学者可以使用某个发行版,就不需要自己编译程序了。直接从官网上下载二进制的发行包就行了。有的发行版有在线安装软件的功能,比如redhat和fedora用的yum,unbuntu用的apt-get等



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值