C 语言开发后的软件如何分发?

2021-03-08 10:42:58 +08:00
 SystemLight
4472 次点击
所在节点    C
36 条回复
secondwtq
2021-03-08 19:27:57 +08:00
@pkookp8 理论上是这样,但是实际做起来不仅要在多个平台上编译,还要在多个平台上测试。
这样就必然会有多个平台的环境。

然后“来都来了”,测试平台都有了,再弄个编译平台也不多。
fighterhit
2021-03-08 19:50:05 +08:00
百度网盘
fovecifer
2021-03-08 20:01:36 +08:00
打包成 rpm 或者 deb 啊 这是标准的分发方式
zhuangzhuang1988
2021-03-08 20:08:35 +08:00
vcpkg
SheehanChen
2021-03-08 20:16:47 +08:00
@SystemLight docker 运行 GUI 的话可以试试 run 的时候加这两条 -e DISPLAY=$DISPLAY -e QT_X11_NO_MITSHM=1 -v /tmp/.X11-unix:/tmp/.X11-unix
Jooooooooo
2021-03-08 20:32:23 +08:00
换成 go 吧.
wolong
2021-03-08 20:51:38 +08:00
不好使,虽然可以交叉编译,但是总会遇到这样那样的问题。
楼主你看那些开源软件,release 文件一般都是给出两个 exe ( x86 和 x86_64 ),一个 dmg 。linux 上的一般都是给的源代码,让用户自己去编译,也有给编译好的,但是都打包成 deb 格式,而且都是很老的版本。比如说你源代码最新版本是 1.10 ,deb 版本可能只有 1.05 。
windows 上还好说,编译成 exe,大多数电脑都可以直接运行。linux 版本太多太复杂了,测试成本太高,如果要编译好再分发,至少也要在一两个主流发行版上编译测试吧。
csvips
2021-03-08 21:08:41 +08:00
目前主流的方式是一套代码,不同平台编译。交叉编译固然可以,但是复杂度远比直接换平台编译搞得很多。有一些跨平台的库,能解决平台相关的问题,比如 QT 什么的。或者只用基础库。就可以一套代码在不同平台编译。当然,鉴于你的第三个问题,可以断定你并不了解操作系统。
nurex
2021-03-08 21:41:47 +08:00
软件分发的话一般也就是二进制或者源代码。
关于这三个问题,回答依次是:
不能(除非交叉编译+静态链接,动态链接都可能出问题)
是的
理论上可以,但现在 Windows 平台主要也就 x86 和 ARM,单独编译成本也不大
(真的建议楼主稍微补一下这方面的知识,不然到时候做移植会很痛苦的)
mingl0280
2021-03-09 02:15:45 +08:00
1 巨坑(指 Linux 有时候跨个版本都能给你整出 ABI 不兼容,能搞疯人),2 可以但是坑也不小(我在上班的时候其中一个工作就是干这个,需要平台匹配的 CMakeLists ),3 可以但是也是巨坑划不来。
综上我司用的方案是闭园部分,平台( Windows/Linux )专用两套 CMakeList+Jenkins 自动编译+CMake 打包( Linux )/NSI 打包(Windows),客户示例代码因为简单所以直接跨平台 CMakeLists
waruqi
2021-03-09 07:49:26 +08:00
可以用 xmake 解决交叉编译工具链 自己所有包依赖问题
xsen
2021-03-09 09:20:50 +08:00
1. 不现实
2. 可以
3. 不现实

注:不现实的意思就是,基本没有人这么做;除了部分用来做嵌入式开发的除外(因为第三方库及工具链都是单独编译的)
no1xsyzy
2021-03-09 10:18:16 +08:00
@SystemLight #15 docker GUI 有若干方法,排名不分先后
1. 可以写个 Web API 然后去搞 Web 界面,那可是相当地跨平台。
2. http://wiki.ros.org/docker/Tutorials/GUI 基本上挺全的了。
16fat
2021-03-09 11:44:24 +08:00
1.不建议
2.如果某些模块不想暴露源码的,可以先编译成.a 或者.so ,整个工程可以用 cmake 进行管理;然后一般可以在 docker 上用专门的编译机器生成目标文件
3.不建议
SystemLight
2021-03-10 10:53:14 +08:00
@no1xsyzy WEB 当然很简单,甚至 electron 打包也可以,但是都不考虑,只为了在 C 平台开发而开发,木有办法
no1xsyzy
2021-03-10 11:30:31 +08:00
@SystemLight C 平台也可以写 Web API,然后套 WebUI,参考 aria2 的成套体系,最典型的 C application + HTTP API + WebUI 。
怪异的:emscripten (
不然就是 2,说了很多方法,不过几乎都是 graphics over network

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

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

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

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

© 2021 V2EX