在 Mac OS X El Capitan(10.11) 下编译安装 Nginx 1.8.0 并 --with-http_ssl_module 时, 报错
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
系统: OS X El Capitan 10.11.1
Nginx: nginx-1.8.0.tar.gz
openssl: openssl-1.0.2d.tar.gz
zlib: zlib-1.2.8.tar.gz
pcre: pcre-8.36.tar.gz
tar nginx-1.8.0.tar.gz
cd nginx-1.8.0
./configure --prefix=/usr/local/nginx \
--with-zlib=../zlib-1.2.8 \
--with-pcre=../pcre-8.36 \
--with-openssl=../openssl-1.0.2d \
--with-http_ssl_module
make
make 时报错:
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [objs/nginx] Error 1
make: *** [build] Error 2
产生错误的原因是 nginx 在调用 openssl 的源码编译时, 调错了 configure 文件, 最终没能正确编译出需要的 openssl x86_64 库文件。
在 nginx 编译时执行完 ./configure 命令后, 不要继续 make, 要先修改下 Makefile 文件, 做法:
# 在当前 nginx 源码目录
cd objs
vi Makefile
找到类似这行
&& ./config --prefix=/Users/wid/Downloads/nginx-1.8.0/../openssl-1.0.2d/.openssl no-shared \
将 config
修改为 Configure darwin64-x86_64-cc
, --prefix 之后的不用修改, 修改后的如:
&& ./Configure darwin64-x86_64-cc --prefix=/Users/wid/Downloads/nginx-1.8.0/../openssl-1.0.2d/.openssl no-shared \
修改保存, 反回到上级 nginx 源码目录继续执行 make 即可。
注意: 修改完 Makefile 文件后不要再次执行 configure, 会重新生成 Makefile 覆盖掉我们的修改。