不懂就问:其他电脑编译好的二进制文件可以直接到其他机器使用吗?

2020-11-01 14:18:35 +08:00
 solider245
如题,经常遇到很多文件因为网络问题无法安装。
那么,我可以在其他电脑将二进制文件编译好,然后再通过网盘工具或者其他下载工具,将其下载到本地电脑直接使用吗?

比如我有一台香港的 ubuntu 服务器,编译安装好了一个软件,然后将其打包,我本地有一台电脑,直接将软件下载到本地,然后解压缩直接使用。可以这样吗
7199 次点击
所在节点    Linux
38 条回复
misaka19000
2020-11-01 14:24:25 +08:00
可以的,这个分为两种

1. 两台机器的操作系统、CPU 指令集一致,这样能保证可执行文件的结构以及相应的指令集符合目标机器的要求
2. 如果不符合上一个条件,可以使用交叉编译
VDimos
2020-11-01 14:28:10 +08:00
你要处理一些环境变量之类的,不嫌麻烦完全可以
skydiver
2020-11-01 14:30:57 +08:00
打包成 deb 包,包管理器会处理依赖问题
unicloud
2020-11-01 14:33:18 +08:00
那得看在编译时有没有依赖特定的环境变量.
Osk
2020-11-01 14:40:43 +08:00
可以的:
如果 CPU 架构不同,可以交叉编译。

同 cpu 架构 + 不同操作系统:可以交叉编译。

同 cpu 架构 + 同操作系统 + 不同发行版:需要注意运行库版本的问题,方法也挺多的,比如静态编译,或者暴力点,用 ldd 等工具把依赖的 so 文件一起拷走。

同 cpu 加构 + 同操作系统发行版:最简单了,记好安装了哪些包,这边对应着装上就好,建议打包成 deb/rpm 等该发行版的包,更好安装和管理。
mikeguan
2020-11-01 15:03:04 +08:00
直接打 docker 镜像
solider245
2020-11-01 15:05:48 +08:00
@misaka19000
@Osk 简单来说,我在远程服务器上的二进制文件,将其打包成 deb 包。然后下载到本地,之后再将 deb 包解压安装即可?
Jirajine
2020-11-01 15:28:22 +08:00
静态编译 or docker or snap/flatpak/appimage
user8341
2020-11-01 15:45:21 +08:00
打包成 deb 用什么? checkinstall 吗?
irytu
2020-11-01 15:56:46 +08:00
1. 不同 CPU 架构下,需要交叉编译,用可以生成 target 二进制的 toolchain

2. 相同架构下,注意链接的动态库不能丢
icyalala
2020-11-01 15:58:03 +08:00
@solider245 前提是编译时使用的指令集在服务器和本地是通用的,比如两边都是 x64 的,也没用什么 avx512 之类的可能有一边不支持的指令。还有依赖的动态库两边也要兼容。
Nimrod
2020-11-01 16:17:31 +08:00
@mikeguan 不同架构下的 docker 也不能直接跑。。
mikeguan
2020-11-01 16:26:05 +08:00
@Nimrod 那就把 dockerfile 复制过来
msg7086
2020-11-01 17:11:55 +08:00
同指令集(如 x86_64 ),同发行版同版本(如 Ubuntu 20.04 ),可以直接搬过来用。
当然前提是本机装齐依赖。

否则至少需要静态编译,或者把依赖的库版本一起复制过来。如果编译环境太新,运行环境太久,还要涉及到内核兼容性还有 libc 兼容性等等,出问题概率很大。

这就和 Windows 上的软件一样,你编译完的 exe 也不是拷出来就能用的,一样需要备齐 dll 依赖。然后新的软件老的系统可能跑不起来。
XiLingHost
2020-11-01 18:46:42 +08:00
@Nimrod 那就直接打 OVA 包
Tumblr
2020-11-01 18:51:21 +08:00
这个标题 shock 到我了。。。
我们平时下载的 binary file,不基本上都是别人在别的电脑上编译好的么。。。
forgottencoast
2020-11-01 19:04:45 +08:00
@Tumblr 我以为第一条回复就会是你这样的,结果到最后才有一条,看来是我不太了解背景。
Tumblr
2020-11-01 19:26:51 +08:00
@forgottencoast #15 看到标题,震惊之后我想可能是楼主想问交叉编译之类的吧,结果看了楼主的表述,确实是第一反应想到的。
lscexpress
2020-11-01 19:40:01 +08:00
希望楼主下次叫不懂就查或者搜索,这种烂问题已经问烂了
solider245
2020-11-01 19:45:34 +08:00
@msg7086 原来是这样,简单来说就是 a 机器上的 bin 文件放到 b 机器上,只要 b 的环境依赖和 a 一样,那就可以直接使用。
@lscexpress 很尴尬的是,很多问题搜索后找不到,但是来论坛上问反而有人回答。可能是中文环境问题。一般报错或者简单的英文问题直接搜英文就有答案而且还很专业。搜索中文的,99%都是营销答案,抄的有时候还是很古老的东西。
看中文的问题经常让我怀疑我们中国人编程是真的不行。但是一到论坛上提问,却发现论坛上的回答又快又好,而且还很细致。以至于做一个答案汇总甚至都可以出一篇技术小短文了……

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

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

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

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

© 2021 V2EX