sách gpt4 ai đã đi

ios - 如何在 iOS 应用中使用 LuaSocket?

In lại 作者:行者123 更新时间:2023-12-01 17:39:02 26 4
mua khóa gpt4 Nike

我正在开发一个可以运行的iOS应用Lua脚本,我可以轻松集成基础 lua支持 CocoaPods , 但是我怎样才能添加 LuaSocket图书馆进吗? LuaSocket包含一些 C还有一些 Lua文件,有人有想法吗?谢谢!

1 Câu trả lời

iOS 8 允许动态框架(库)可能有更优雅的方法,但以下适用于 Lua 5.2.3(因为您使用的是 Cocoapods,而 5.2.3 是 Cocoapod 提供的版本)和 LuaSocket 3.0-rc1 .

请注意,我实际上并没有使用 Cocoapod;在你的 iOS 项目中包含 Lua 非常简单,我发现使用 Cocoapods 不值得。 YMMV。由于路径差异,您可能需要对我在下面描述的内容进行一些调整。

  • 创建一个新的 iOS 'Single View' 项目
  • 在 XCode 的项目导航器中创建一个名为 Lua 的组
  • từ nguồn 复制所有文件(除了 lua.c、luac.c、lua.hpp 和 makefile) Lua目录下下载到本组
  • 在 XCode 的项目导航器中创建一个名为 LuaSocket 的组
  • từ nguồn 复制所有文件(除了 makefile、wsocket.c、wsocket.h) LuaSockets目录下下载到本组
  • 添加行 #import "luasocket.h"到 LuaSocket 源中的文件 serial.h

  • 此时,您应该能够构建和运行应用程序而不会出现任何错误。当然,它还没有真正做任何事情......

    首先,我们要修改 luaL_openlibs使其初始化 LuaSocket 的 C 代码如下。

    在 Lua 源中,找到文件 linit.c 并更改
    static const luaL_Reg loadedlibs[] = {
    {"_G", luaopen_base},
    {LUA_LOADLIBNAME, luaopen_package},
    {LUA_COLIBNAME, luaopen_coroutine},
    {LUA_TABLIBNAME, luaopen_table},
    {LUA_IOLIBNAME, luaopen_io},
    {LUA_OSLIBNAME, luaopen_os},
    {LUA_STRLIBNAME, luaopen_string},
    {LUA_BITLIBNAME, luaopen_bit32},
    {LUA_MATHLIBNAME, luaopen_math},
    {LUA_DBLIBNAME, luaopen_debug},
    {NULL, NULL}
    };

    đến
      {"_G", luaopen_base},
    {LUA_LOADLIBNAME, luaopen_package},
    {LUA_COLIBNAME, luaopen_coroutine},
    {LUA_TABLIBNAME, luaopen_table},
    {LUA_IOLIBNAME, luaopen_io},
    {LUA_OSLIBNAME, luaopen_os},
    {LUA_STRLIBNAME, luaopen_string},
    {LUA_BITLIBNAME, luaopen_bit32},
    {LUA_MATHLIBNAME, luaopen_math},
    {LUA_DBLIBNAME, luaopen_debug},
    {"socket", luaopen_socket_core},
    {"mime", luaopen_mime_core},
    {NULL, NULL}
    };

    您需要添加 #include "luasocket.h"#include "mime.h"在 linit.c 的顶部。

    您还需要将一些其他 C 函数添加到此列表中,例如 luaopen_socket_unix ,但我会将它们作为练习留给读者。

    现在我们将转向 LuaSocket 中包含的各种 Lua 源文件,例如 socket.lua 和 mime.lua。而不是使用 require要加载这些,我们将使用 luaL_dofile 执行它们.

    为了具体一点,假设我们想使用 LuaSocket 为我们的 View Controller 做一些初始化。我们将在 viewDidLoad 中创建 Lua 状态, 调用 luaL_openlibs , 初始化核心库和 LuaSocket 的 C 库,然后我们将使用 NSBundle 中的例程获得要运行的 Lua 文件的文件路径.

    我们需要编辑 Lua 文件以删除 require 的所有行。 socket.core、mime.core 等,因为这比尝试获取 require 更简单行为正确。此外,socket.core 和 mime.core 已经被我们修改过的 luaL_openlibs 初始化了。 ,所以不需要 require他们。

    Vì thế viewDidLoad看起来像这样:
    - (void)viewDidLoad
    {
    [super viewDidLoad];

    lua_State *L = luaL_newstate();
    luaL_openlibs(L);

    // Load socket.lua and mime.lua

    NSString *fp = [[NSBundle mainBundle] pathForResource:@"socket" ofType:@"lua"];
    luaL_dofile(L, [fp cStringUsingEncoding:NSUTF8StringEncoding]);

    fp = [[NSBundle mainBundle] pathForResource:@"mime" ofType:@"lua"];
    luaL_dofile(L, [fp cStringUsingEncoding:NSUTF8StringEncoding]);

    lua_settop(L, 0); // ignore return values from the calls to dofile


    // Now do something with the Lua state and LuaSockets

    NSString *script = @"res = mime.b64('LuaSocket', 'works')";
    luaL_dostring(L, [script cStringUsingEncoding:NSUTF8StringEncoding]);
    lua_getglobal(L, "res");
    const char *s = luaL_checkstring(L, 1);
    NSLog(@"res = %@", [NSString stringWithCString:s encoding:NSUTF8StringEncoding]);
    }

    还有一些松散的结局,但这应该说明要点。您可以查看 example project我在 Github 上创建的。在接下来的几天里,我会清理它并展示更多 LuaSocket 的功能。

    关于ios - 如何在 iOS 应用中使用 LuaSocket?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28382583/

    26 4 0
    行者123
    Hồ sơ cá nhân

    Tôi là một lập trình viên xuất sắc, rất giỏi!

    Nhận phiếu giảm giá Didi Taxi miễn phí
    Mã giảm giá Didi Taxi
    Giấy chứng nhận ICP Bắc Kinh số 000000
    Hợp tác quảng cáo: 1813099741@qq.com 6ren.com