最近开始使用Nginx,很奇怪,为什么不能像其它中间件一样提供安装包直接启动?难道在x86的CentOS与Ubuntu 上,编译后的文件还不一样?
原因很简单里面含有c的源码。
1.高级语言如java基于虚拟机所写代码编译后是字节码会由虚拟机解释成原始汇编。
2.c语言的源码如nginx则直接就jit成汇编。
3.汇编执行需要不同的指令集,而x86/amd64、arm指令集是不同的、我国的loongarch64指令集基于mips。不同的指令集能解读的汇编也不同。所以需要nginx在不同的操作系统下编译成不同的指令集支持的内容。
4.nginx在 arm linux下源码编译生成的就是arm 64指令集。在mips指令集就是mips的内容。所以会出现楼主说的那种每种平台要重新编译的情况。
5.如果做成对应的deb包或rpm包其实步骤也基本相同,只不过是安装包程序帮你完成了这个工作。但deb包这里就已经打包了,就算同为linux如arm包和mips包是无法混用的。
windows平台可以直接安装的原因很简单,windows 过去只有win32的x86指令集。而只有这一种指令集所以只需要出一个安装包即可。现在则会出现windows arm 和x86两种安装包而这两种也不能混用。
编译安装的好处就是不用做成很多不同的安装包,只需要cmake就可以了。
大概率是因为是用c写的吧,c的特性就是一次编写,处处编译
nginx可以制作免安装包
可以用yum,apt,docker
一次编写 到处编译
版本/插件支持问题
一般生产用的发行版的安装包版本较低
编译安装可以使用最新版
同样适用于其他软件
另外 如果对版本/插件没要求,一般发行版自带的就能满足需求。
直接用docker 运行不就行了?如果需要额外的拓展插件,自己构建docker镜像也能完美解决。
不知道现在马路都通了吗?大家都用上手机了!
应该有定制的傻瓜式安装包,得找找不一定要编译,看下哪个网友比较人品好,自己做好的编译包上传上来
原因很简单里面含有c的源码。
1.高级语言如java基于虚拟机所写代码编译后是字节码会由虚拟机解释成原始汇编。
2.c语言的源码如nginx则直接就jit成汇编。
3.汇编执行需要不同的指令集,而x86/amd64、arm指令集是不同的、我国的loongarch64指令集基于mips。不同的指令集能解读的汇编也不同。所以需要nginx在不同的操作系统下编译成不同的指令集支持的内容。
4.nginx在 arm linux下源码编译生成的就是arm 64指令集。在mips指令集就是mips的内容。所以会出现楼主说的那种每种平台要重新编译的情况。
5.如果做成对应的deb包或rpm包其实步骤也基本相同,只不过是安装包程序帮你完成了这个工作。但deb包这里就已经打包了,就算同为linux如arm包和mips包是无法混用的。
windows平台可以直接安装的原因很简单,windows 过去只有win32的x86指令集。而只有这一种指令集所以只需要出一个安装包即可。现在则会出现windows arm 和x86两种安装包而这两种也不能混用。
编译安装的好处就是不用做成很多不同的安装包,只需要cmake就可以了。
大概率是因为是用c写的吧,c的特性就是一次编写,处处编译
nginx可以制作免安装包
可以用yum,apt,docker
一次编写 到处编译
版本/插件支持问题
一般生产用的发行版的安装包版本较低
编译安装可以使用最新版
同样适用于其他软件
另外 如果对版本/插件没要求,一般发行版自带的就能满足需求。
直接用docker 运行不就行了?如果需要额外的拓展插件,自己构建docker镜像也能完美解决。
不知道现在马路都通了吗?大家都用上手机了!
应该有定制的傻瓜式安装包,得找找不一定要编译,看下哪个网友比较人品好,自己做好的编译包上传上来