日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本

發布時間:2025/6/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Lua移植到arm上?并實現在arm?可以讓lua腳本調c語言,C語言調用lua腳本

首先參考http://wiki.chumby.com/index.php?title=Lua&printable=yes上的做法,修改lua-5.1.4.tar.gz.?上的Makefile,編譯過后會在/src目錄下生成可以在arm-linux上可以運行的lua解析器和luac編譯器。我們在arm-linux下運行lua腳本,只需要用到lua解析器就ok了,所以,我們把lua?cp到我們開發板linux系統上的?/bin目錄下就ok了。這樣,在開發板上的linux系統就可以自動地找到lua并使用它了。

Lua

From?ChumbyWiki

Jump?to:?navigation,?search

Lua?is?a?lightweight?scripting?language?-?see?the?Lua?website

Building?lua

·?download?and?unpack?the?lua?source?distribution?lua-5.1.4.tar.gz.

·?edit?src/Makefile?

o?line?10?

CC=arm-linux-gcc

o?line?12?

AR=arm-linux-ar

o?line?13?

RANLIB=arm-linux-ranlib

o?line?15?

LIBS=?-lm?$(MYLIBS)?-static

o?line?99,?remove?-lreadline?-lhistory?-lncurses??//這里可能行數有點偏差

??把這行的內容$(MAKE)?all?MYCFLAGS=-DLUA_USE_LINUX?MYLIBS="-Wl,-E?-ldl?-lreadline?-lhistory?-lncurses"

????改成????$(MAKE)?all?MYCFLAGS=-DLUA_USE_LINUX?MYLIBS="-Wl,-E?-ldl?"

?

·?edit?src/luaconf.h,?comment?out?line?39?(disable?LUA_USE_READLINE)

·?do:

?make?linux

?arm-linux-strip?src/lua

?

?

?

接下來,我們看看如何實現在arm?linux上實現lua腳本調c語言:

?

1.寫一個jiaohu.c文件:

?

#include?<math.h>

#include?"lua.h"

#include?"lualib.h"

#include?"lauxlib.h"

?

?

static?int?my_foo(lua_State*?L)

{

???????int?n?=?lua_gettop(L);

???????int?isnum?=?lua_isnumber(L,?1);

???????int?m?=?lua_tonumber(L,?1);

???????printf("%d?%d?%d\n",?n,?isnum,?m);

???????lua_pushnumber(L,m);

???????lua_pushstring(L,"foo?ret?string\n");

???????return?2;

}

?

LUALIB_API??int?my_init(lua_State*?L)

{

???????lua_register(L,?"foo",?my_foo);

???????return?0;

}

?

用?arm-linux-gcc?-I/root/lua-5.1.4/src/??-L/root/lua-5.1.4/src/??-shared?-fPIC?jiaohu.c?-o?jiaohu.so編譯,這樣就把可以加到lua上的動態庫編譯好了。

?

再寫一個lua的調用腳本?test.lua

?

package.loadlib("./jiaohu.so",?"my_init")()

a?,b=foo(22,33)

?

接下來就是把jiahu.so?和 test.lua放到arm?linux的某個測試用的臨時目錄下就ok

然后執行?一下?>lua?test.lua

顯示??????????>1?1?22

成功實現在arm?linux上實現lua腳本調c語言

?

現在該來看看如何實現在arm?linux下如何實現?C調用lua腳本了

先建立一個?test.c文件:

#include?<stdio.h>???

#include?<lua.h>??

#include?<lualib.h>??

#include?<lauxlib.h>??

??

lua_State*?L;??

int?main?(?int?argc,?char?*argv[]?){??

L?=?luaL_newstate();??

?? luaL_openlibs(L);??

//?? luaL_dofile(L,?"test.lua");??

? luaL_loadfile(L,?"./test.lua");

? int?iError?=?lua_pcall(L,?0,?0,?0);??

????if?(iError)??

????{??

?printf("error?%d?\n",iError);

????????lua_close(L);??

????????return?1;??

????}??

????int?a?=?11?;??

????int?b?=?12?;??

????lua_getglobal(L,"sum");???????????????

????lua_pushinteger(L,a)?;??

????lua_pushinteger(L,b)?;??

????int?ret?=?lua_pcall(L,2,1,0)?;??

????if?(?ret?!=?0?)??

?????{

?printf("error\n");

?return?1;??

?????}

? printf("sum:%d?+?%d?=?%ld\n",a,b,lua_tointeger(L,-1))?;??

????lua_pop(L,1);??

????/*?清除Lua?*/??

??lua_close(L);??

??return?0;??

?}?

?

再建立一個test.lua文件

width=1?;

height=2?;

function?sum(a,b)

????return?a+b?;

End

?

用一下命令來編譯test.c文件

#arm-linux-gcc?-I/root/lua_tool/lua-5.1.4-armlinux/src/??-L/root/lua_tool/lua-5.1.4-armlinux/src/?-lm?-DLUA_USE_READLINE?test.c?/root/lua_tool/lua-5.1.4-armlinux/src/liblua.a?-o?test2?-ldl

?

把生成的test2?test.lua文件拷到arm?linux上運行:

#Lua??test2

就會顯示#sum:11?+?12?=?23

?

?

?

參考文章:

http://hi.baidu.com/hqwfreefly/blog/item/5724afef3b6018dab31cb1d1.html

http://hi.baidu.com/mikenoodle/blog/item/5fd129dd1069a9de8c102948.html

http://wenku.baidu.com/view/0d557b0416fc700abb68fc73.html

http://www.extgui.com/?p=157



? ?

lua編譯問題總結

gcc -lm? -g -o test test.c /usr/local/lib/liblua.a -ldl


如果少-ldl,那么編譯就會報:

gcc -lm? -g -o test test.c /usr/local/lib/liblua.a??

/usr/local/lib/liblua.a(loadlib.o): In function `gctm':
loadlib.c:(.text+0x35): undefined reference to `dlclose'
/usr/local/lib/liblua.a(loadlib.o): In function `ll_loadfunc':
loadlib.c:(.text+0xc0): undefined reference to `dlopen'
loadlib.c:(.text+0xfc): undefined reference to `dlsym'
loadlib.c:(.text+0x198): undefined reference to `dlerror'
loadlib.c:(.text+0x1bb): undefined reference to `dlerror'



如果少liblua.a ,就會報如下問題:

[wangbin@tuan lua]$ gcc -lm? -g -o test test.c? -ldl????????????????????? ?
/tmp/ccCT0d24.o: In function `main':
/home/wangbin/work/tmp/lua/test.c:26: undefined reference to `luaL_newstate'
/home/wangbin/work/tmp/lua/test.c:27: undefined reference to `luaL_openlibs'
/home/wangbin/work/tmp/lua/test.c:29: undefined reference to `luaL_loadbufferx'
/home/wangbin/work/tmp/lua/test.c:29: undefined reference to `lua_pcallk'
/home/wangbin/work/tmp/lua/test.c:32: undefined reference to `lua_tolstring'
/home/wangbin/work/tmp/lua/test.c:33: undefined reference to `lua_settop'
/home/wangbin/work/tmp/lua/test.c:36: undefined reference to `lua_close'
collect2: ld returned 1 exit status


如果少-lm,那么編譯結果如下:

[wangbin@tuan lua]$ gcc -g -o test test.c /usr/local/lib/liblua.a -ldl?
/usr/local/lib/liblua.a(lobject.o): In function `luaO_arith':
lobject.c:(.text+0xdf): undefined reference to `pow'
/usr/local/lib/liblua.a(lvm.o): In function `luaV_execute':
lvm.c:(.text+0x159a): undefined reference to `pow'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_sin':
lmathlib.c:(.text+0x3e): undefined reference to `sin'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_sinh':
lmathlib.c:(.text+0x6e): undefined reference to `sinh'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_cos':
lmathlib.c:(.text+0x9e): undefined reference to `cos'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_cosh':
lmathlib.c:(.text+0xce): undefined reference to `cosh'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_tan':
lmathlib.c:(.text+0xfe): undefined reference to `tan'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_tanh':
lmathlib.c:(.text+0x12e): undefined reference to `tanh'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_asin':
lmathlib.c:(.text+0x15e): undefined reference to `asin'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_acos':
lmathlib.c:(.text+0x18e): undefined reference to `acos'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_atan':
lmathlib.c:(.text+0x1be): undefined reference to `atan'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_atan2':
lmathlib.c:(.text+0x1fb): undefined reference to `atan2'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_fmod':
lmathlib.c:(.text+0x2db): undefined reference to `fmod'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_sqrt':
lmathlib.c:(.text+0x391): undefined reference to `sqrt'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_pow':
lmathlib.c:(.text+0x3d3): undefined reference to `pow'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_log':
lmathlib.c:(.text+0x450): undefined reference to `log'
lmathlib.c:(.text+0x460): undefined reference to `log'
lmathlib.c:(.text+0x486): undefined reference to `log10'
lmathlib.c:(.text+0x4aa): undefined reference to `log'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_log10':
lmathlib.c:(.text+0x4de): undefined reference to `log10'
/usr/local/lib/liblua.a(lmathlib.o): In function `math_exp':
lmathlib.c:(.text+0x50e): undefined reference to `exp'
collect2: ld returned 1 exit status

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人av色 | 好吊视频一区二区三区四区 | 精品人妻码一区二区三区红楼视频 | 亚洲精品77777 | 奶罩不戴乳罩邻居hd播放 | 成人片黄网站色大片免费毛片 | 五月网| 亚洲精品一区二区在线观看 | 求个黄色网址 | 亚洲男女av | 欧美精品一区二区在线播放 | 少妇人妻邻居 | 日本三级一区二区 | 国外成人性视频免费 | 免费高清视频在线观看 | 午夜一本| 欧美大色网 | 色窝窝无码一区二区三区 | 久久精品99国产精 | 午夜啪啪福利视频 | 日本成人在线免费观看 | 91毛片观看 | 护士的小嫩嫩好紧好爽 | 日韩av影视大全 | 欧美日韩蜜桃 | 无码任你躁久久久久久老妇 | 视频一区在线观看 | 熟女人妻aⅴ一区二区三区60路 | 国产一区二区免费电影 | 天天操狠狠干 | 在线看黄免费 | 视频一区二区在线播放 | 欧美a性 | 91麻豆精品国产理伦片在线观看 | 国产精品影院在线观看 | 婷婷午夜影院 | 在线看片网站 | 美女性高潮视频 | 国产亚洲一区在线 | 96福利视频| 男同志毛片特黄毛片 | 在线观看国产一区二区 | 狼性av懂色av禁果av | 欧美日韩精品在线 | 中文字幕一区二区三区精品 | 91香蕉国产 | 北条麻妃av在线播放 | 日韩欧美一区二区三区久久婷婷 | 天天干天天爱天天射 | 国产在线播放一区二区三区 | 麻豆久久久久久久久久 | 超碰人人干 | 精品国产无码在线观看 | av手机观看 | 日韩欧美精品在线视频 | 日韩一区二区三区三四区视频在线观看 | 一区二区自拍偷拍 | 日韩av一级片 | 亚洲av无码久久忘忧草 | 黄色污污视频 | 日韩在线一卡 | 亚洲欧美日韩激情 | 成人伊人网站 | 亚洲大色网 | 国产高清一区在线观看 | 男女一进一出视频 | 亚洲综合91 | 一区二区三区免费毛片 | 久久免费在线视频 | 制服一区二区 | 欧美在线视频一区二区 | av动漫在线免费观看 | 国产精品久久久久毛片 | 午夜爽爽影院 | 亚洲aaa| 欧美不卡在线观看 | 中日韩一级片 | 国产一级一片免费播放放a 丁香六月色 | a级片国产 | 黄频视频在线观看 | 欧美高潮视频 | 蜜桃久久久久久久 | 精品久久久久久久中文字幕 | 黄色专区| 亚洲美女视频一区 | fc2ppv色の美マンに中出し | a级黄色小视频 | 欧美成人黄色小说 | 看日本黄色录像 | 毛片毛片毛片毛片毛片毛片毛片毛片 | 午夜亚洲成人 | 国产又粗又猛又爽又黄视频 | 国产日韩久久久 | 老师的肉丝玉足夹茎 | 精品人妻一区二区三区日产 | 在线一区二区视频 | 日韩乱码人妻无码中文字幕 | 五月中文字幕 | 日韩av视屏 |