默认编译出的 nginx 可执行文件会依赖编译环境的一些动态库,现在想着编译出来之后可以在不同的设备上部署,是否可以在编译时静态链接,本人尝试使用如下编译参数 ./configure --with-pcre --prefix=/home/nginx-1.16.1/output/ --with-http_ssl_module --with-openssl=/usr/src/openssl-1.0.1g --with-pcre=/home/source_pkt/pcre-8.44 --with-zlib=/home/source_pkt/zlib-1.2.11 --with-cc-opt=-static-libgcc --with-ld-opt='-static' 在编译时加入了-static 但是报错如下: checking for --with-ld-opt="-static" ... not found ./configure: error: the invalid value in --with-ld-opt="-static"
有没有知道怎么静态编译 nginx 的,谢谢
1
eason1874 2021-03-03 13:07:18 +08:00
问这种问题得说下自己是什么系统环境吧,不然别人比你更加一头雾水。
可能缺少 glibc,检查下,没有就安装之后再试。最好是用 Docker |
2
1260475686 OP @eason1874 我想问下目前 nginx 支持静态编译不,我的环境是标准的 Centos8
|
3
eason1874 2021-03-03 13:20:14 +08:00
|
4
Kasumi20 2021-03-03 13:40:26 +08:00
依赖实在是太多了,make 都难
不知道 exe 是怎么编译出来的,cygwin 环境下搞过,失败告终。 官方的 exe 就是静态的 |
5
suconghou 2021-03-03 13:52:04 +08:00
对于 nginx 来说 so easy , https://github.com/suconghou/docker/tree/master/nginx
|
6
Cooky 2021-03-03 13:57:13 +08:00 via Android
appimage ?
|
7
warcraft1236 2021-03-03 13:58:53 +08:00
官方文档下,这个参数是这么用的
--with-ld-opt=parameters sets additional parameters that will be used during linking. When using the system PCRE library under FreeBSD, --with-ld-opt="-L /usr/local/lib" should be specified. |
8
msg7086 2021-03-03 15:03:08 +08:00
@eason1874 CentOS 8 到期可以换 RHEL 8,OL8,alma,rocky,等等,为什么要弃呢……
@1260475686 随便搜到了别人的脚本,你可以对照着试验: https://trac.nginx.org/nginx/ticket/903 |
9
1260475686 OP @suconghou 这个编译出来的 nginx 不依赖动态库吗?
|
10
1260475686 OP @msg7086 https://trac.nginx.org/nginx/ticket/903 这个我看了,加上-static 参数,报错
|
11
suconghou 2021-03-03 17:20:40 +08:00
@1260475686 不依赖, 你可以把镜像里的 nginx 文件复制出来,都能运行
|
12
liuhan907 2021-03-04 01:21:44 +08:00 via Android
虽然有点文不对题,但你这个需求不就是典型的 docker 场景么?
|
13
1260475686 OP @liuhan907 可是我们现在不是为了部署到容器,不过跟 docker 场景还真一个情况,你们有 docker 部署方法吗
|
14
liuhan907 2021-03-04 14:31:46 +08:00 via Android
@1260475686 部署到容器不是目的是手段啊
|
15
1260475686 OP @liuhan907 。。。。。。。。。。。。。
|
16
liuhan907 2021-03-04 20:12:40 +08:00 via Android
@1260475686
你这个场景下,直接把程序打包成镜像然后用容器跑不就无关乎系统依赖了? |
17
szpunk 2021-10-27 06:00:42 +08:00
#Alpine: nginx 1.21.3 + openssl 3.0 static
./configure --prefix=/usr/local --conf-path=/root/cfg/nginx.conf --error-log-path=/var/log/nginx.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --with-openssl-opt="enable-ec_nistp_64_gcc_128 threads zlib sctp" --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-stream_realip_module --with-stream_geoip_module --with-stream_ssl_preread_module --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-pcre --with-libatomic --with-compat --with-file-aio --with-threads --with-poll_module --with-select_module --with-openssl=../openssl-3.0.0 --with-cc-opt="-static -s" --with-ld-opt="-static" #Result /usr/local/nginx/sbin/nginx: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped #nginx -V nginx version: nginx/1.21.3 built by gcc 10.3.1 20210625 (Alpine 10.3.1_git20210625) built with OpenSSL 3.0.0 7 sep 2021 TLS SNI support enabled configure arguments: --prefix=/usr/local/nginx --error-log-path=/var/log/nginx.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --with-openssl-opt='enable-ec_nistp_64_gcc_128 threads zlib sctp' --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-stream_realip_module --with-stream_geoip_module --with-stream_ssl_preread_module --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-pcre --with-libatomic --with-compat --with-file-aio --with-threads --with-poll_module --with-select_module --with-openssl=../openssl-3.0.0 --with-cc-opt='-static -s' --with-ld-opt=-static |
18
guanzhangzhang 2021-12-17 17:44:08 +08:00
@szpunk 我编译报错
``` checking for --with-ld-opt="-static" ... not found ./configure: error: the invalid value in --with-ld-opt="-static" ``` |
19
szpunk 2021-12-17 23:35:09 +08:00
@guanzhangzhang #18 确定是在 Alpine 下编译?
`Linux alpine 5.15.5-0-lts #1-Alpine SMP Fri, 26 Nov 2021 08:35:12 +0000 x86_64 Linux` |
20
guanzhangzhang 2021-12-18 17:58:11 +08:00
@szpunk 我是下载
git clone https://github.com/nginxinc/docker-nginx.git ``` ARG CFLAGS ARG LDFLAGS ``` 看了下 makefile 的逻辑,传递这俩参数的,然后改 Dockerfile 里的逻辑,不走那个包管理的 case ,走非 x86_64 和非 arm64 的源码编译 ``` docker buildx build -t zhangguanzhang/nginx:arm64-static . \ --platform linux/arm64 --build-arg="CFLAGS='-static -s'" --build-arg=LDFLAGS=-static ``` 然后编译就报错上面的 |
21
guanzhangzhang 2022-01-26 16:53:05 +08:00
|
22
1260475686 OP @guanzhangzhang 大佬,厉害
|