今天在mac os 上编译安装Nginx时候,报错:ld: symbol(s) not found for architecture x86_64, 通过一番折腾以后发现,因为Nginx依赖openssl库,查看openssl的./config 文件发现,这个问题应该是 openssl/config脚本猜对你的系统是64位,可是 会根据$KERNEL_BITS来判断是否开启x86_64编译,默认不开启,他会给你5秒时间确认是否中止编译,手动设置x86_64编译,因此默认你生成的openssl库文件是32位的,最后静态连接到nginx会出错。目前看来没有很好的方法把x86_64的参数传到openssl配置文件中 (openssl/config 猜想os架构,设置编译的参数是32位仍是64位,默认是32位,而后调用openssl/Configure生成Makefile),nginx
解决办法就是:架构
先运行nginx源码目录下运行
$ ./configuressl
而后在objs里,打开Makefile,源码
找到: ./config --prefix=xxx.openssl no-shared (注释:XXX是已存在的openssl源码路径)openssl
把该段的 ./config 改为 ./Configure darwin64-x86_64-cc 其余后面参数不变,保存it
而后再make就编译经过了编译