nginx中静态链接Lua模块

一:链接一个lua模块

1.编辑foo.lua文件
 local _M = {}
 function _M.go()
     print("Hello from foo")
 end
 return _M

2.编译foo.lua文件生成foo.o文件
luajit -bg foo.lua foo.o
-b .lua文件生成字节码文件.o
-g 生成的字节码文件.o做调试用,如果不用于调试可以不包含该选项

3.编译Nginx/OpenResty时使用.o文件
./configure --with-ld-opt="/path/fo/foo.o"

4.使用foo.lua文件
local foo = require("foo")
foo.go()

注:如果希望使用模块名:resty.foo,则源文件名为resty_foo.lua,.o文件名为resty_foo.o
      编译模块文件和编译Nginx/OpenResty使用的luajit版本应该一致,否则luajit的版本之间不兼容的话,使用的时候就找不到指定的lua模块

二:链接两个lua模块

1.编辑、编译生成foo.o, bar.o

2.编译Nginx/OpenResty时使用.o文件
./configure --with-ld-opt="/path/fo/foo.o /path/fo/bar.o"

三:链接多个lua模块

1.将多个.o文件生成静态库文件
ar rcus libmyluafiles.a *.o

2.编译Nginx/OpenResty时使用.a文件
./configure --with-ld-opt="-L/path/to/lib -Wl,--whole-archive -lmyluafiles -Wl,--no-whole-archive"
-L      指示libmyluafiles.a所在文件路径
-Wl,   表示将后面的参数传递给链接器
--whole-archive   nginx主执行模块中没有提及到该静态库文件,该静态库文件在编译的时候可能会被跳过

猜你喜欢

转载自blog.csdn.net/u013139008/article/details/80038060
今日推荐