墨盒飞飞 2019-05-29 12:49 采纳率: 100%
浏览 533
已采纳

如何编译与 lua 交互的c++文件 成 so 请帮帮我这个新手 我要崩溃了

我最近在做一些游戏脚本的开发,使用的是lua 语言.
但是在使用的时候,总感觉脚本平台 提供的函数威力不够大.
就想这自己去扩展一些使用的功能出来.
以前学过一点c++ 想着 用opencv 做一些小功能 应该不是太难.
但是我在做的时候第一步就遇到了大麻烦.

主要就是 吧c++代码编译成so 总是弄不成

找来了代码

#include <lua.h>
#include <luaxlib.h>
#include <stdio.h>

static int log(lua_State *L){
    int num = luaL_checkinteger(L, 1);
    printf("log num :%d", num);
    return 0;
}

static int logEx(lua_State *L){
  size_t len = 0;
  const char* str = lua_checkstring(L, 1, &len);
  print("logEx %s %d", str, len);
  return 0
}

int luaopen_mylib(lua_State *L){
  luaL_Reg = libs[] = {
    {"log", log},
    {"logEx", log},
    {nullptr, nullptr}
  }
  luaL_newlib(L, 1);
  return 1;
}

接下来就是编译了 ,然后噩梦来,
我从来没用过 linux 就想着能不能在Windows下生成so
上网找了一下 好像 用Android 的ndk 应该是可以的

然后继续找资料是 大致学习了下 make cmake 是怎么回事

还有 Android.mk 等等

就开始搞了 ,但是中间不停的出问题 ,
最后到了这一步我做不下去了.
图片说明

上面这个是代码 ,没什么问题 .
图片说明

这个是 错误提示

但是他太奇怪了

他说找不到 这个符号 但是 这些明明已经在上面的头文件里面声明了

我也正确引用了 怎么会找不到?

而且你们看上面的语法高亮. 明明是找到了的.
我按转到声明也能,正确找到相关头文件.

后来 直接 吧头文件 内容 直接复制到这里面也不行 还是出现这种错误.

在然后我干脆放弃 在Windows下生成了

在Linux 中依然也是 这种错误

图片说明
图片说明

在Android.mk 中我也指定了 头文件所在目录
图片说明

图片说明

文件也没差

图片说明

结果是一样的

后来换用了 clion

图片说明

居然能生成 一切看起来 多么美好 拿到手机上测试一下吧
实际使用

图片说明

好吧 64位!!!!!!

查资料 改 32位 改好了

图片说明

这又是什么鬼 继续查资料 好吧好像是编译器的问题 改吧 加参数
图片说明

好吧到这一步我已经完全 看不懂了 连资料都没得查

为了这个东西我已经搞了好几天了 绝大部分都是在查资料学习

说实话 反复的失败真的很打击人

不知道是不是一开始我的方向就走错了 导致越走越歪

有相关经验朋友 能给提个可行的解决方案吗

  • 写回答

2条回答 默认 最新

  • 墨盒飞飞 2019-05-30 04:42
    关注

    已经解决 在mk文件中添加
    LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求.net core 几款免费的pdf编辑器
  • ¥20 SQL server表计算问题
  • ¥15 C# P/Invoke的效率问题
  • ¥20 thinkphp适配人大金仓问题
  • ¥20 Oracle替换.dbf文件后无法连接,如何解决?(相关搜索:数据库|死循环)
  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)