nginx靜態編譯lua[jit]

原淘寶工程師清無(王曉哲)和春來(章亦春)開發的lua nginx模塊非常強大。現在網上的安裝方法主要都是動態編譯lua的,但是總有種種原因動態編譯有諸多不便,這時候就需要將luajit靜態編譯進nginx裏

第一種方法就是直接使用 openresty,並利用openresty提供的方式靜態編譯luajit

安裝nginx nginx_lua_module luajit nginx_dev_kit步驟略

第二種方法就是在nginx  configure執行過後,修改生成的objs/Makefile文件
在第一個target  “objs/nginx: objs/src/core/nginx.o \”下面,添加luajit的靜態文件
-Wl,-E -lpthread -lcrypt -L  /xxx/xxx/lua/libs -lluajit-5.1 -lm -ldl /xxx/xxx/pcre-8.02/.libs/libpcre.a -lssl -lcrypto -ldl -lz
改成
-Wl,-E -lpthread -lcrypt /xxx/xxx/libluajit-5.1.a -lm -ldl /xxx/xxx/pcre-8.02/.libs/libpcre.a -lssl -lcrypto -ldl -lz

改完後 再執行 make && make install 就行了
我們用ldd nginx命令可以看到,已經依賴luajit動態鏈接庫了

第三種方法
移除luajit的so文件,只保留.a文件,這樣ld在連接時找不到so文件,就只好鏈接.a文件了。

這樣改了之後,還需要修nginx_lua的config文件,否則configure會失敗,失敗原因是gcc需要-ldl參數
修改nginx_lua的config 
ngx_feature_libs="-R$LUAJIT_LIB -L$LUAJIT_LIB -lluajit-5.1 -lm"
改爲
ngx_feature_libs="-R$LUAJIT_LIB -L$LUAJIT_LIB -lluajit-5.1 -lm -ldl"
即可
相應位置的ngx_feature_libs 都需要添加-ldl這個參數

改完後,重新編譯nginx,就可以成功了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章