V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
monson
V2EX  ›  奇思妙想

能否把动态库.so 当静态库.a 用?

  •  
  •   monson · 2022-09-13 11:54:43 +08:00 · 1820 次点击
    这是一个创建于 589 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这两天遇到的小问题,在目标机器需要运行个命令,但没有系统权限不能安装;程序可以从其他机器拷过去,但所依赖的 .so 有点麻烦,又不想全部从头开始编译个静态版本。所以想,能否把动态库 .so 当静态库.a 用?

    理论上 .so 和 .a 核心的执行代码是一样的,不过是寻址之类有差别,这个可以合适地 manipulate 解决。当然,.so 可能依赖其他 .so ,但可以递归地把所有依赖打包起来,哪怕最后的执行程序会很大。最不济的方案,做个虚拟的动态库调用接口,实际返回代码段是截取这个大包的一小段,似乎这样也可以实现。

    可是,我没找到现成的将二进制程序和其依赖打包成一个大程序的方案,请问这里是有我没想到的不可解决的难点么?

    5 条回复    2022-09-13 13:11:32 +08:00
    missdeer
        1
    missdeer  
       2022-09-13 11:59:12 +08:00
    des
        2
    des  
       2022-09-13 12:09:47 +08:00 via iPhone
    用 LD_LIBRARY_PATH 不行吗?
    nightwitch
        3
    nightwitch  
       2022-09-13 12:16:10 +08:00 via Android
    设置 ld_library_path ,让从当前目录加载 so
    westoy
        4
    westoy  
       2022-09-13 12:18:19 +08:00
    改环境变量

    patchelf 改文件的 rpath

    statifier 打包, 就是这东西已经很多年不维护了, 不知道还能不能用

    docker 大法好
    Jirajine
        5
    Jirajine  
       2022-09-13 13:11:32 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1007 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:25 · PVG 04:25 · LAX 13:25 · JFK 16:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.