今天在mac os 上編譯安裝Nginx時候,報錯:ld: symbol(s) not found for architecture x86_64, 經過一番折騰之後發現,由於Nginx依賴openssl庫,查看openssl的./config 文件發現,這個問題應該是 openssl/config ...
今天在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源碼目錄下運行
$ ./configure
然後在objs里,打開Makefile,
找到: ./config --prefix=xxx.openssl no-shared (註釋:XXX是已存在的openssl源碼路徑)
把該段的 ./config 改成 ./Configure darwin64-x86_64-cc 其他後面參數不變,保存
然後再make就編譯通過了