nginx静态编译luajit (openresty)

来源:互联网 发布:access数据库案例 编辑:程序博客网 时间:2024/04/23 20:40

最近折腾 openresty 的版本的升级, 由于加入了自定义的模块, 需要更改相关编译脚本。 

从官网下载了最新的 openresty-1.11.2.2  , 首先尝试了下原版的编译,很顺利,但是编译后的nginx 二进制是动态链接 libluajit-5.1.so.2的, 在跨机器部署时有点麻烦 和不便,最好能静态编译 luajit.a 到nginx 二进制中。

从网上看到了 以下几种方法(http://blog.csdn.net/liujiyong7/article/details/17530915 ),都比较繁琐, 自己摸索了一条方法,分享下。 
其实下面第三种方法手动去除 so文件,可以自动化,在luajit 的makefile文件中,去除掉生成so 文件的指令即可。 
在 luajit 的makefile文件中,注释掉 安装 so 动态库的指令即可,然后重新编译openresty 即可。 

install: $(INSTALL_DEP)
@echo "==== Installing LuaJIT $(VERSION) to $(PREFIX) ===="
$(MKDIR) $(INSTALL_DIRS)
cd src && $(INSTALL_X) $(FILE_T) $(INSTALL_T)
cd src && test -f $(FILE_A) && $(INSTALL_F) $(FILE_A) $(INSTALL_STATIC) || :
$(RM) $(INSTALL_DYN) $(INSTALL_SHORT1) $(INSTALL_SHORT2)
# install so lib
#cd src && test -f $(FILE_SO) && \
#  $(INSTALL_X) $(FILE_SO) $(INSTALL_DYN) && \
#  $(LDCONFIG) $(INSTALL_LIB) && \
#  $(SYMLINK) $(INSTALL_SONAME) $(INSTALL_SHORT1) && \
#  $(SYMLINK) $(INSTALL_SONAME) $(INSTALL_SHORT2) || :
#

cd etc && $(INSTALL_F) $(FILE_MAN) $(INSTALL_MAN)
cd etc && $(SED_PC) $(FILE_PC) > $(FILE_PC).tmp && \
 $(INSTALL_F) $(FILE_PC).tmp $(INSTALL_PC) && \
 $(RM) $(FILE_PC).tmp
cd src && $(INSTALL_F) $(FILES_INC) $(INSTALL_INC)
cd src/jit && $(INSTALL_F) $(FILES_JITLIB) $(INSTALL_JITLIB)
#$(SYMLINK) $(INSTALL_TNAME) $(INSTALL_TSYM)
@echo "==== Successfully installed LuaJIT $(VERSION) to $(PREFIX) ===="





网络上的方法总结如下: 
1. 直接使用 openresty,并利用openresty提供的方式静态编译luajit

安装nginx nginx_lua_module luajit nginx_dev_kit步骤略

2. 在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动态链接库了

3.  移除luajit的so文件,只保留.a文件,这样ld在连接时找不到so文件,就只好链接.a文件了 
改完后,重新编译nginx。


0 0