參考**:
1. 新建calcmath.cpp,輸入:
1 #include 2 #include 3 #include 4說明:包含三個函式:isquare計算平方,isqrt計算開方,ivecadd計算兩個陣列對應元素之和。//using namespace std;56
7extern"c
"1213float isquare(float
val)
1417
18double isqrt(double
val)
1922
23void ivecadd(double* a, double* b, int
len)
2429 }
2. 在終端中輸入:
g++ -shared -fpic -o libcalcmath.so calcmath.cpp此時當前資料夾內會生成libcalcmath.so。
說明:不能使用gcc,會提示如下錯誤:
undefined symbol: _znst8ios_base4initd1ev截圖如下:
3. 新建呼叫該庫的lua檔案:calcmath.lua(名字隨便),並輸入:
b 該檔案名字如果為ffi.lua的話,可能不能在其他檔案內成功呼叫(應該是與系統檔案ffi.lua衝突):
也可能能呼叫成功(在另一台電腦上試了一下,如果用include則失敗,如果用dofile則成功。。。)。
160830更新:剛才又試了一下,即便該檔案名字為『ffi.lua』,無論是include還是dofile,都能成功:test.lua的前6行如下:
local ffi = require("如果不加第一句require就不行。估計程式能區分開哪個是系統的庫檔案,哪個是當前的檔案。。。先將就著這樣理解吧。ffi")--
include 'ffi.lua' -- this line and the following 2 line are both ok
require
'paths
'paths.
dofile('
ffi.lua
')
4. 新建測試程式test.lua,並輸入:
1說明:a第一句local ffi = require("ffi")必須要,否則下面的ffi.new無法使用。local ffi = require("
ffi")2
3--include 'calcmath.lua' -- this line and the following 2 line are both ok45
require
'paths
'6 paths.dofile('
calcmath.lua')
78local c =calcmath.c910
local squareval = c.isquare(5)11
(squareval)
12local sqrtval = c.isqrt(5)13
(sqrtval)
1415
local a = ffi.new('
double[2]
', )
16local b = ffi.new("
double[2]
", )
1718
local x = ffi.cast('
double&
',a)
19local y = ffi.cast('
double&
',a+1)20
21 c.ivecadd(a, b, ffi.sizeof(a)/8)22
print(tonumber(x), tonumber
(y))
23print(ffi.sizeof(a))
b 不確定是否需要釋放new出來的記憶體。。。(以後碰到了再說吧)。
5. 結果:
使用th test.lua結果如下:
無法使用lua test.lua,會提示如下的錯誤:
使用luajit test.lua,結果如下:
說明:
如果isqrt中引數型別使用float的話,精度會有損失,結果為:
2.2360680103302
使用double後,結果為:
2.2360679774998
使用計算器的結果:
2.2360679774997896964091736687313
可見,使用double後,精度範圍內結果一致。
lua呼叫c程式
鑑於lua5.4版本取消了lual register之後,網上教程的混亂,這裡以5.4版本為例,用lual setfuncs來代替。如下 ifdef cplusplus extern c else include include include include endif include inclu...
Lua的使用入門之在C 程式中呼叫lua函式1
學習lua將近半個月了,以前也了解過,只是沒有實際運用的環境。現在將自己這半個月來的心得寫下來。首先,要想在c 程式中作用lua指令碼,必須包含相應的lua標頭檔案,extern c 因為lua是基於c的,所以要使變數和 函式按照c語言方式編譯和連線 在你的編譯環境中要包含lua的標頭檔案,我的是l...
lua呼叫c 的函式 使用tolua
1.定義c 類與函式 include class cppfunctions include cppfunctions.h include include 使用linux下獲取時間的函式 double cppfunctions getcurrenttime 2.繫結 我新建了乙個tolua.h和乙個t...