遇事不决掷骰子 发表于 2022-9-5 23:09

Ubuntu,我有一个软件,只有源码,没有二进制包

需要在内网用。我在外网安装好dev的依赖包,然后编译,编译完成之后在内网还是没法用。难道连依赖包也得是源码编译才行?

tsubasa9 发表于 2022-9-5 23:13

内网没装依赖

5long 发表于 2022-9-5 23:26

根据控制变量法, 这就是网络的区别吧(

For real: 用 `ldd <编译好的二进制文件>` 看一下缺什么动态链接库文件, 然后再对应地装依赖试试

纱夜抱着榴弹炮 发表于 2022-9-5 23:30

依赖包,动态链接库,处理器架构,glibc版本,都看看?

yst234 发表于 2022-9-5 23:30

试试弄个静态编译的版本,大不了二进制文件大小起飞

nessaj 发表于 2022-9-6 10:42

香港记者巴拉森 发表于 2022-9-7 08:48

本帖最后由 香港记者巴拉森 于 2022-9-7 08:50 编辑

依赖包的文件不在你内网的环境变量里?

—— 来自 Xiaomi M2007J17C, Android 10上的 S1Next-鹅版 v2.5.4

b0207191 发表于 2022-9-7 10:41

外网环境编好后构建成容器,然后拷贝到内网用?

r_ex 发表于 2022-9-7 10:42

&#x5982;&#x679C;&#x5185;&#x7F51;Ubuntu&#x7684;glibc&#x7248;&#x672C;&#x6BD4;&#x5916;&#x7F51;&#x7684;&#x4F4E;&#xFF0C;&#x6700;&#x597D;&#x662F;&#x9759;&#x6001;&#x94FE;&#x63A5;
glibc&#x4E0D;&#x80FD;&#x9759;&#x6001;&#x94FE;&#x63A5;&#xFF0C;&#x8981;&#x5B8C;&#x5168;&#x9759;&#x6001;&#x94FE;&#x63A5;&#x5F97;&#x7528;musl libc&#x4E4B;&#x7C7B;&#x7684;&#x624D;&#x884C;&#xFF0C;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x4ECE; https://musl.cc/ &#x4E0B;&#x5DE5;&#x5177;&#x94FE;&#xFF0C;&#x5E26;gcc&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x7528;clang&#xFF0C;&#x4E0D;&#x8FC7;&#x9700;&#x8981;&#x8BBE;&#x7F6E;--sysroot&#x548C;--gcc-toolchain
&#x5982;&#x679C;&#x6CA1;&#x6CD5;&#x7528;musl libc&#xFF0C;&#x53EF;&#x4EE5;&#x628A;&#x5185;&#x7F51;&#x7684;/usr/include&#x8FD8;&#x6709;&#x5E93;&#x62F7;&#x51FA;&#x6765;&#xFF0C;&#x7136;&#x540E;&#x7F16;&#x8BD1;&#x7684;&#x65F6;&#x5019;&#x8BBE;&#x7F6E;--sysroot

&#x5176;&#x4ED6;&#x4F9D;&#x8D56;&#x6700;&#x597D;&#x662F;&#x9759;&#x6001;&#x94FE;&#x63A5;&#xFF0C;&#x4E0D;&#x80FD;&#x7684;&#x8BDD;&#x9700;&#x8981;&#x5185;&#x7F51;&#x673A;&#x5668;&#x4E0A;&#x4E5F;&#x6709;&#xFF0C;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x5B89;&#x88C5;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x548C;&#x53EF;&#x6267;&#x884C;&#x6587;&#x4EF6;&#x653E;&#x5728;&#x4E00;&#x8D77;(&#x4F46;&#x9ED8;&#x8BA4;&#x662F;&#x7EDD;&#x5BF9;&#x8DEF;&#x5F84;&#xFF0C;&#x6539;&#x4E3A;&#x76F8;&#x5BF9;&#x8DEF;&#x5F84;&#x9700;&#x8981;&#x94FE;&#x63A5;&#x7684;&#x65F6;&#x5019;&#x8BBE;&#x7F6E;&#x94FE;&#x63A5;flag -rpath $ORIGIN&#xFF0C;&#x6CE8;&#x610F;&#x5199;&#x6CD5;&#x548C;&#x8F6C;&#x4E49;&#xFF0C;&#x6216;&#x8005;&#x94FE;&#x63A5;&#x4E4B;&#x540E;&#x4F7F;&#x7528;patchelf&#x6765;hack&#x4E00;&#x4E0B;)&#xFF0C;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;ldd&#x6765;&#x6D4B;&#x8BD5;

whzfjk 发表于 2022-9-7 11:00

r_ex 发表于 2022-9-7 14:22

whzfjk 发表于 2022-9-7 11:00
拖家带口自备依赖链甚至自编 C 库本质上是在重复 docker 干的是吧(

其实docker是邪道,你看Windows从来不需要这样解决依赖问题
容器本来是做隔离的,现在有多少docker是用来做隔离呢?

另外docker解决不了这个问题,docker的guest和host共享内核,如果guest中的程序依赖的操作系统调用在host的内核中没有实现,就会出错。因此通常要求docker运行时的host的内核版本号要大于等于docker里面的程序假设的内核版本号

Nanachi 发表于 2022-9-7 14:26

打包成snap有没有搞头

whzfjk 发表于 2022-9-7 21:48

r_ex 发表于 2022-9-7 22:17

whzfjk 发表于 2022-9-7 21:48
windows 不是系统包袱很大,同时第三方程序都拖家带口把 dll 带全了么
遇到缺 vc++ redistributable 和特 ...

拖家带口这问题不大啊,又占不了多少空间
缺vc++ resdistributable那是因为应用没自己带
.Net Framework那是另外一个问题了,不过.Net Framework兼容性还是挺好的,总共不兼容的也就三代吧(.Net 1.0-1.1, 2.0-3.5, 4.0-4.8),一般后面两个都装就没问题了

mp5 发表于 2022-9-8 09:57

r_ex 发表于 2022-9-7 14:22
其实docker是邪道,你看Windows从来不需要这样解决依赖问题
容器本来是做隔离的,现在有多少docker是用来 ...

都有源码了,按内网机子的内核版本制作一个docker镜像不是更简单?
有些程序想改成全静态链接还真不算好弄,特别是内核版本不同的情况下

r_ex 发表于 2022-9-8 11:15

mp5 发表于 2022-9-8 09:57
都有源码了,按内网机子的内核版本制作一个docker镜像不是更简单?
有些程序想改成全静态链接还真不算好 ...

直接装个和内网机器一样版本的系统编译,或者做成sysroot用来编译,依赖的deb或者rpm什么的也拷贝到内网机器,感觉更简单
静态编译主要是有很多机器都不知道是什么版本的时候方便一点,当然有时候没法这么搞,比如说依赖X11什么的,或者依赖系统locale、NSS之类的,需要能被hook的时候

migros 发表于 2022-9-8 11:48

用static build

—— 来自 samsung SM-N9860, Android 12上的 S1Next-鹅版 v2.5.2-play

GJRstone 发表于 2022-9-8 13:17

你开发机和内网机版本一致吗,我之前遇到类似的问题是内网机ubuntu18,开发机ubuntu14,18里废弃了几个lib,另外很多软连接的东西不不确认就直接用zip打包的话,软连接也会失效
页: [1]
查看完整版本: Ubuntu,我有一个软件,只有源码,没有二进制包