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

2022-09-13 11:54:43 +08:00
 monson

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

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

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

1827 次点击
所在节点    奇思妙想
5 条回复
missdeer
2022-09-13 11:59:12 +08:00
des
2022-09-13 12:09:47 +08:00
用 LD_LIBRARY_PATH 不行吗?
nightwitch
2022-09-13 12:16:10 +08:00
设置 ld_library_path ,让从当前目录加载 so
westoy
2022-09-13 12:18:19 +08:00
改环境变量

patchelf 改文件的 rpath

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

docker 大法好
Jirajine
2022-09-13 13:11:32 +08:00

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

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

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

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

© 2021 V2EX