欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

LUA 调用C代码的 通用方式

程序员文章站 2022-06-16 08:33:45
LUA 调用C代码的 通用方式测试环境 c4droid 懒人精灵 雷电模拟器C代码:int argc, char* argv[]: argc参数个数 传入的字符串数组下面展示一些 内联代码片。// An highlighted block#include int main(int argc, char* argv[]){ puts("C语言中文网"); puts(argv[2]); puts("w sh bas "); retu...

LUA 调用C代码的 通用方式

测试环境 c4droid 懒人精灵 雷电模拟器

C代码:
int argc, char* argv[]: argc参数个数 传入的字符串数组

下面展示一些 内联代码片

// An highlighted block
#include <stdio.h>
int main(int argc, char* argv[])
{
    puts("C语言中文网");
    puts(argv[2]);
     puts("w sh bas ");
    return 1;
}

C4droid直接编译
LUA代码:

// An highlighted block
function FileCmdRead(str) --文件命令读取\n返回
    print("cmd:"..str)
    
    local cmd=io.popen(str,"r");
    for line in cmd:lines() do
      print(line)
    end
    cmd:close()
    --[[
    if cmd then
            local data=cmd:read("*a");
            cmd:close()
            print(data)
            return true;
        end
        return false,"";
    ]]--
    
end

function main()
	local flag,data=FileCmdRead("/data/data/com.n0n3m4.droidc/files/temp 1 wosh")
    print(flag)
    print(date)
end
main()

调试结果

LUA 调用C代码的 通用方式

踩过的坑

1:二进制执行文件只能放/data/local 或者getworkpath工作目录 才有执行权限
2:每个lua版本的API都有差异
3:main(int argc, char* argv[]) argv[] 数组参数下标从 0开始,但是 io.popen 传入的参数是 从 1开始
4:android 编译需要 选择编译器 GCC+Bionic

总结:通过C4droid直接编译C文件为二进制文件 LUA 通过 io.popen 调用这个文件

最后感谢 懒人精灵的开发者作者:懒人 要不然每次研究到死胡同都感觉自己研究不下去了

本文地址:https://blog.csdn.net/qq_27684977/article/details/109624303