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

有没有办法把 so 库打包进可执行程序

  •  
  •   iBaoger · 2019-02-14 12:29:38 +08:00 · 5304 次点击
    这是一个创建于 2107 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 Linux 系统下,有没有办法把 so 库打包进可执行程序,这样可执行程序就变成纯静态的,不需要依赖操作系统的动态 so 库,方便迁移

    17 条回复    2019-02-23 20:41:40 +08:00
    mutalisk
        1
    mutalisk  
       2019-02-14 12:35:37 +08:00
    那.so 的意义何在呢,那不如编译的时候直接链接.a 静态库就是了
    Brucewyw
        2
    Brucewyw  
       2019-02-14 12:40:07 +08:00
    so 进不了可执行程序 搞.a 静态库
    SPACELAN
        3
    SPACELAN  
       2019-02-14 12:40:14 +08:00
    当然是可以的啊,先用 xxd 之类的工具把 so 转换成字节数组放到源代码中,运行时把 so 写到任意位置再 dlopen 一下。。
    0ZXYDDu796nVCFxq
        4
    0ZXYDDu796nVCFxq  
       2019-02-14 12:44:57 +08:00 via Android
    已经编译好的不能这么干。

    你可以修改二进制和 so 的 rpath,然后把 so 一起打包。
    一般情况下,这样干是可以跨发行版运行的。
    tomychen
        5
    tomychen  
       2019-02-14 13:07:11 +08:00
    完全丢掉系统的 .so 是有点尷尬的,但是,一些常用的倒是可以把他编译到和可执行同目录,迁移的时候,也是整目录带走,但是系统层的可能还是不行,比如(g)libc

    事实上有很多产品都是这么干的
    leoleoasd
        6
    leoleoasd  
       2019-02-14 13:16:50 +08:00
    用 go
    yanaraika
        7
    yanaraika  
       2019-02-14 13:44:25 +08:00
    rpath 了解一下
    jsfaint
        8
    jsfaint  
       2019-02-14 14:00:28 +08:00
    AppImage?
    socradi
        9
    socradi  
       2019-02-14 15:12:43 +08:00
    熟悉 elf 的话或许可以实现
    mason961125
        10
    mason961125  
       2019-02-14 15:23:53 +08:00
    emmm glibc 你总不能也打包进去吧...
    messyidea
        11
    messyidea  
       2019-02-14 15:33:23 +08:00   ❤️ 1
    http://www.magicermine.com/
    是不是类似这种东西
    qieqie
        12
    qieqie  
       2019-02-14 15:37:01 +08:00   ❤️ 1
    @mason961125 其实可以,把配套的 ld-linux.so 一起打包,然后用打包的 ld-linux.so 加载就行了
    像上面说的 rpath 或者环境变量 LD_LIBRARY_PATH 都可以
    feather12315
        13
    feather12315  
       2019-02-14 17:36:01 +08:00 via Android
    可以的。
    可以用 dlopen 打开 .so
    kios
        14
    kios  
       2019-02-14 17:39:08 +08:00
    dlopen 可以
    hilbertz
        15
    hilbertz  
       2019-02-14 17:48:28 +08:00
    Flatpak,AppImage,Snap
    runningman
        16
    runningman  
       2019-02-14 19:03:55 +08:00 via iPhone
    那就只能静态库了
    q397064399
        17
    q397064399  
       2019-02-23 20:41:40 +08:00
    docker 吧 9012 年了 还不用 docker
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1467 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:14 · PVG 01:14 · LAX 09:14 · JFK 12:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.