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

八月 27, 2017 9:09 下午 发布者 评论

在 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 覆盖掉我们的修改。

作者 wid

发表评论

电子邮件地址不会被公开。 必填项已用*标注