linux 编译好的软件包通用吗?

2016-04-01 08:37:48 +08:00
 PerNet
最近在玩 OPENWRT ,用 hc5761 刷机刷了 openwrt 15.05 版本的系统。然后安装了挖矿软件玩玩,发现不太好用,又换了潘多拉系统(14.09 版本的),也安装了挖矿插件。突然发现我刷的两个系统内核版本不一样竟然安装了同一个 ipk 。不是听说编译好的二进制不同内核平台是不通用的吗? 百度了一下说的模糊不清, 同一个编译好的二进制,不通内核版本的 linux 应该不通用吧? 因为用 debian 的时候不同版本对应的 apt-get 源也不一样。但是同一个架构(mips)我安装了不同版本内核 kernel 的 linux ,然后安装了同一个编译好的软件是正常可以运行的。
openwrt :http://rssn.cn/roms/
潘多拉系统: http://downloads.openwrt.org.cn/PandoraBox/
挖矿插件 https://github.com/kuoruan/luci-app-youku/blob/master/releases/luci-app-youku_1.2.1-1_all.ipk
6694 次点击
所在节点    Linux
23 条回复
tankb52
2016-04-01 09:25:39 +08:00
你这样看, Flyme 和 MiUI 都可以跑同一个 apk 啊。
hei1000
2016-04-01 09:32:55 +08:00
"不通内核版本的 linux 应该不通用", 那要看是否调用了不通内核版本之间的差异化接口
zeus255
2016-04-01 09:37:45 +08:00
1 、 ABI 相同。 2 、所有的依赖库都能做到前向兼容。
一般来说符合这两个条件即可。
liyvhg
2016-04-01 09:58:29 +08:00
openwrt 的 ipk 在编译生成的时候可以设置依赖, 依赖分为硬件依赖和软件依赖.
说人话: 只要是相同或相近 CPU 的产品, 在刷了 openwrt 之后, ipk 大多能通用. 例如大量的 MT7620n 和 MT7620a 路由器
少数 ipk 安装的时候提示不兼容, 大多是软件依赖中的内核依赖不满足, 可以手动解压缩提取出 bin 文件也能跑起来.
RqPS6rhmP3Nyn3Tm
2016-04-01 10:04:39 +08:00
如果我记得没错, API, ABI, CPU 架构兼容就可以。
BOYPT
2016-04-01 10:31:24 +08:00
程序跟内核没什么关系,绝大多数程序不会去直接和内核打交道;即使有和内核通信,也已经是几十年不变的标准接口。只要程序的 CPU 架构兼容,依赖的运行库兼容就可以跑。
bramblex
2016-04-01 11:16:33 +08:00
依赖库的版本不同,甚至命名不同都有可能导致程序不能跑……

linux 下面二进制包的发行问题已经被诟病不是一天两天了……

建议静态编译……
PerNet
2016-04-01 12:02:45 +08:00
@BOYPT @BXIA 如果说 cpu 架构兼容 abi 依赖解决,那么为什么好多 BCM 芯片的 openwrt 不提取驱动兼容呢? 网上说 DD 和 tomato 的支持 bcm 芯片但是内核比较老。既然这样升级内核后保证依赖库不就行了吗?为什么不升级内核呢?
nicevar
2016-04-01 12:03:40 +08:00
linux 的依赖搞死几代人了
PerNet
2016-04-01 12:05:18 +08:00
@BOYPT @BXIA 说的比较乱整理下不知道能理解不! 既然编译好的二进制包和内核关系不大, DD 和 tomato 为什么不学 openwrt 升级内核呢?直接解决下 abi 和依赖库不就行了吗? 还有 openwrt 更新内核比较快为什不提取对应的二进制驱动打包上去呢?
RqPS6rhmP3Nyn3Tm
2016-04-01 12:10:20 +08:00
@PerNet 抱歉我并不了解,但是我记得之前看过书是这么说的。
PerNet
2016-04-01 12:11:35 +08:00
帖子不能编辑了。我想问下,如果我安装三个个 liunx ,同样的硬件。就内核版本不一样。 3.x 4.x 5.x 。我在 3.x 下编译了一个软件,如 unzip 。我把编译好的二进制文件放到同样硬件不同 liunx 内核(如 4.x 5.x )的电脑还可以执行吗?突然想到还没时间做测试。哪位大神知道帮忙解答下!
PerNet
2016-04-01 12:12:05 +08:00
@BXIA 谢谢了!我有时间自己测试研究下把!
BOYPT
2016-04-01 13:07:20 +08:00
@PerNet 对嵌入式来说多数情况下升级内核并没有任何意义,而且还会有很多驱动是只能在特定版本内核使用。驱动!=程序。
SCaffrey
2016-04-01 13:09:04 +08:00
@PerNet 帖子可以加附言
BOYPT
2016-04-01 13:09:44 +08:00
@PerNet 那要看你编译时候的参数是否能兼容你的 3 个 linux 。类似的情况你可以参考 java 的二进制 jre/jdk 包、 mysql 的二进制包,他们都是 linux 下的“绿色软件”,只要架构兼容既可以解压运行。
3dwelcome
2016-04-01 13:11:53 +08:00
"帖子可以加附言", 加附言好贵的,还不如留言呢。

一般而言,都是可以兼容的,只要你依赖库 so 不要太特殊。我都是 cygwin 下编译成 elf, 然后直接 SSH 扔到服务器上运行,类似 unzip 这种算法,一点问题也没有。
Khlieb
2016-04-01 16:39:05 +08:00
这要看官方发行时候的说明
Neveroldmilk
2016-04-01 16:52:18 +08:00
No ,除非作死。
techmoe
2016-04-01 17:10:29 +08:00
@tankb52 是因为 app 都运行在一样的虚拟机里吧,再说他们全是安卓系统

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/267788

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX