解决 Mac OS X 下 Nginx 编译报错 symbol(s) not found for architecture x86_64

在 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

编译过程 (详细参见: 《Mac OS X 下编译安装 Nginx》)
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 覆盖掉我们的修改。

分类:  MacOS
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值