在openresty的nginx.conf配置加了
init_by_lua_file xxx/init.lua
init.lua中require("binary_protocol")
这个so库依赖libtolua++.so
在机器上的标准动态库搜索路径中,是没有该库的。
我把这个库放在/usr/local/workspace/my_lib文件夹中。
我自己包装了个启动脚本./ngx.sh,具体代码如下:
==========分割线==========
#!/bin/sh
export LD_LIBRARY_PATH=/usr/local/workspace/my_lib:${LD_LIBRARY_PATH}
PROG=/usr/local/openresty/nginx/sbin/nginx
${PROG} $@
==========分割线==========
其实就是追加了动态库搜索路径。
之后我执行./ngx.sh。报找不到binary_protocol.so依赖的库libtolua++.so。具体错误如下;
==========分割线==========
nginx: [error] init_by_lua_file error: error loading module 'binary_protocol' from file '/usr/local/workspace/lua_lib/binary_protocol.so':
libtolua++.so: cannot open shared object file: No such file or directory
stack traceback:
[C]: at 0x7fc2cbcb5460
[C]: in function 'require'
/usr/local/workspace/test_server/lua/init.lua:1: in main chunk
如果我直接在机器的命令行执行lua就是ok的。
[kinga@test lua_lib]$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/workspace/my_lib
[kinga@test lua_lib]$ lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> require("binary_protocol")
>
==========分割线==========
另外,执行./ngx.sh的用户和最终nginx启动的用户都是用户kinga。
个人猜测是openresty在查找动态库时没有用上我在环境变量 LD_LIBRARY_PATH 追加的路径。
但是不知道为什么没用上。
有哪位大大可以帮忙解释下吗?
这种方式是可以往系统添加动态库的搜索路径,但是全局的。
shell> echo "/usr/local/workspace/my_lib" > /etc/ld.so.conf.d/usr_local_lib.conf
shell> ldconfig