V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
PerNet
V2EX  ›  Linux

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

  •  
  •   PerNet · 2016-04-01 08:37:48 +08:00 · 6720 次点击
    这是一个创建于 3194 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在玩 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
    23 条回复    2016-04-02 23:20:27 +08:00
    tankb52
        1
    tankb52  
       2016-04-01 09:25:39 +08:00
    你这样看, Flyme 和 MiUI 都可以跑同一个 apk 啊。
    hei1000
        2
    hei1000  
       2016-04-01 09:32:55 +08:00
    "不通内核版本的 linux 应该不通用", 那要看是否调用了不通内核版本之间的差异化接口
    zeus255
        3
    zeus255  
       2016-04-01 09:37:45 +08:00   ❤️ 1
    1 、 ABI 相同。 2 、所有的依赖库都能做到前向兼容。
    一般来说符合这两个条件即可。
    liyvhg
        4
    liyvhg  
       2016-04-01 09:58:29 +08:00
    openwrt 的 ipk 在编译生成的时候可以设置依赖, 依赖分为硬件依赖和软件依赖.
    说人话: 只要是相同或相近 CPU 的产品, 在刷了 openwrt 之后, ipk 大多能通用. 例如大量的 MT7620n 和 MT7620a 路由器
    少数 ipk 安装的时候提示不兼容, 大多是软件依赖中的内核依赖不满足, 可以手动解压缩提取出 bin 文件也能跑起来.
    RqPS6rhmP3Nyn3Tm
        5
    RqPS6rhmP3Nyn3Tm  
       2016-04-01 10:04:39 +08:00
    如果我记得没错, API, ABI, CPU 架构兼容就可以。
    BOYPT
        6
    BOYPT  
       2016-04-01 10:31:24 +08:00
    程序跟内核没什么关系,绝大多数程序不会去直接和内核打交道;即使有和内核通信,也已经是几十年不变的标准接口。只要程序的 CPU 架构兼容,依赖的运行库兼容就可以跑。
    bramblex
        7
    bramblex  
       2016-04-01 11:16:33 +08:00
    依赖库的版本不同,甚至命名不同都有可能导致程序不能跑……

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

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

    一般而言,都是可以兼容的,只要你依赖库 so 不要太特殊。我都是 cygwin 下编译成 elf, 然后直接 SSH 扔到服务器上运行,类似 unzip 这种算法,一点问题也没有。
    Khlieb
        18
    Khlieb  
       2016-04-01 16:39:05 +08:00
    这要看官方发行时候的说明
    Neveroldmilk
        19
    Neveroldmilk  
       2016-04-01 16:52:18 +08:00
    No ,除非作死。
    techmoe
        20
    techmoe  
       2016-04-01 17:10:29 +08:00
    @tankb52 是因为 app 都运行在一样的虚拟机里吧,再说他们全是安卓系统
    ujmxyd
        21
    ujmxyd  
       2016-04-01 20:20:55 +08:00 via iPhone
    flynaj
        22
    flynaj  
       2016-04-02 18:49:47 +08:00 via Android
    abi 相同,依赖库都有就可以了, abi 相同简单,依赖库就是大问题了,跟 windows 下的 DLL 一样,世界老大难问题
    googlebot
        23
    googlebot  
       2016-04-02 23:20:27 +08:00 via Android
    争取静态编译,减少依赖,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2532 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:59 · PVG 11:59 · LAX 19:59 · JFK 22:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.