nginx 编译时需用 --with-ld-opt 指定链接器参数,关键要加 -wl,-rpath,路径 使二进制运行时能找到自定义位置的动态库(如 /opt/openssl/lib),否则启动报 libssl.so.3 找不到;-l 指定编译时库路径,-wl,-rpath 硬编码运行时搜索路径。

Nginx 源码编译时指定额外链接器参数,核心是用 --with-ld-opt 传给 configure 脚本。它直接影响 ld(链接器)行为,比如指定库路径、运行时搜索路径、链接特定静态库等。
关键作用是让 nginx 二进制文件在运行时能正确找到动态库(如 libssl.so),尤其当你自建 OpenSSL 或其他第三方库时。
必须加 -Wl,-rpath,路径 才能避免运行时报错
如果不加 -rpath,即使编译通过,启动时很可能报:libssl.so.3: cannot open shared object file: No such file or directory
这是因为系统默认只查 /lib64、/usr/lib64 等标准路径,而你的库在 /opt/openssl/lib 这类自定义位置。
正确写法示例(配合自编译 OpenSSL):
./configure \ --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-openssl=/dev/null \ --with-cc-opt="-I/opt/openssl/include" \ --with-ld-opt="-L/opt/openssl/lib -Wl,-rpath,/opt/openssl/lib"
-
-L/opt/openssl/lib:告诉链接器编译时去哪找.so文件 -
-Wl,-rpath,/opt/openssl/lib:把该路径“硬编码”进 nginx 二进制,运行时自动加载
其他常见链接器参数用途
链接静态库(如强制用静态 OpenSSL):
--with-ld-opt="-L/opt/openssl/lib -lssl -lcrypto -static-libgcc -static-libstdc++"
(注意:需 OpenSSL 编译时启用了静态库支持)启用栈保护(增强安全性):
--with-ld-opt="-Wl,-z,relro -Wl,-z,now"链接系统级优化库(如 jemalloc):
--with-ld-opt="-L/usr/lib -ljemalloc"
注意事项
- 多个参数用空格分隔,不要换行或加引号包裹整个字符串
-
-Wl,xxx是 GCC 向 ld 透传的语法,逗号不能省略 - 若同时用多个
-rpath,用冒号分隔:-Wl,-rpath,/a:/b:/c -
--with-ld-opt和--with-cc-opt是独立的,编译选项(头文件)归前者,链接选项(库文件)归后者
基本上就这些。











