Nginx lua 實現呼叫 so檔案

2021-09-18 02:27:04 字數 1804 閱讀 2490

本文給大家分享的是nginx結合lua 實現呼叫.so動態鏈結庫檔案的方法和示例,有需要的小夥伴可以參考下

最近在和智慧型硬體部門一起,做乙個室內定位的服務,該服務根據手機端傳過來的beacon裝置列表,根據一定的演算法計算出具體的商場,並將商場id和beason裝置列表作為引數,呼叫.so檔案中的計算方法,得出位置資料(座標:x、y、z),返回給手機端。

因為服務對qps要求比較高,並且都是純查詢操作,於是決定使用nginx+lua+redis的架構(該架構在公司內部已成主流,比較成熟)。下面我將對lua呼叫.so檔案的方式,做一下介紹。

lua呼叫.so檔案,主要有兩種方式:

鑑於第一種方式需要引入第三方工具包,並且效率不高,所以我們採用第二種方式來實現。具體實現過程如下:

1.編寫業務**,其中包括業務方法的封裝器。

lua entry thread aborted: runtime error: error loading module 『mlualib』 from file 『/var/wdd/wrs/webroot/intelligent_lua/mlualib.so』: /var/wdd/wrs/webroot/intelligent_lua/mlualib.so: undefined symbol: _z13lua_tolstringp9lua_stateipmstack traceback:coroutine 0: [c]: in function 『require』 /var/wdd/wrs/webroot/intelligent_lua/location.lua:18: in function…

另外,如果是.cpp檔案,在luaopen_mylib一定要加 extern 「c」, 否則匯出的函式會被重新命名,切記切記! 關於extern 「c」,請參考 extern 「c」 用法解析。

2.nginx配置檔案中指定so包所在的資料夾。搜尋引擎大全

lua_package_cpath 『/var/wdd/wrs/webroot/intelligent_lua/?.so;;』;

注意,這裡有很多種配置方式,只要讓lua能找到so檔案即可,比如可以通過lua**package.cpath來引入(參閱下面**段)或者直接把so檔案複製lua環境變數指定的目錄裡等。

package.cpath = 『/usr/local/lib/lua/5.1/?.so;』 --搜尋so模組

如果未指定cpath或者cpath中找不到so檔案,系統會報如下異常:

no file 『./mlualib.lua』 no file 『/usr/local/openresty/luajit/share/luajit-2.1.0-beta1/mlualib.lua』 no file 『/usr/local/share/lua/5.1/mlualib.lua』 no file 『/usr/local/share/lua/5.1/mlualib/init.lua』 no file 『/usr/local/openresty/luajit/share/lua/5.1/mlualib.lua』 no file 『/usr/local/openresty/luajit/share/lua/5.1/mlualib/init.lua』 no file 『/usr/local/openresty/lualib/mlualib.so』 no file 『./mlualib.so』 no file 『/usr/local/lib/lua/5.1/mlualib.so』 no file 『/usr/local/openresty/luajit/lib/lua/5.1/mlualib.so』 no file 『/usr/local/lib/lua/5.1/loadall.so』 no file 『/var/wdd/wrs/webroot/intelligent_lua/mlualib.so』

Unity Android呼叫 so檔案

最近做乙個專案,發布目標平台是android,開發中需要呼叫甲方的.so檔案 用ndk直接編譯c 檔案而成 網上查了下呼叫方式,和呼叫dll相同,大致步驟如下 1.將.so檔案放在assets plugins android目錄下 2.c 檔案中使用 dllimport 檔名 不含lib字首和.so...

python呼叫 so檔案

專案需要python呼叫.so檔案,使用網上的教程會丟擲異常。而這種方法可以完整呼叫,但是我忘記當初是怎麼寫的了。如果後面還要用到再來完善。from ctypes import adddll cdll.loadlibrary libpyckapi.so adddll.sendrequestautho...

nginx lua實現登陸驗證

用於在多台伺服器上單點登入sso 無session,使用者身份的驗證。1 安裝lua yum install readline.x86 64 readline devel.x86 64 wget make linux make install 注意 不要使用5.2版本,5.2版本的lua和nginx...