文档章节

尝试在 iPad 上为 Codea 加载第三方 lua 库

FreeBlues
 FreeBlues
发布于 2017/07/04 17:30
字数 738
阅读 47
收藏 0

尝试在 iPad 上为 Codea 加载第三方 lua 库

概述

在别人的代码中学到一种方法, 可以通过 requireCodea 中直接加载 lua 库, 感觉很实用, 打算尝试着扩展一下, 看看能否加载用 c 编译出来的 .dylib 动态库和 .a 静态库.

加载 .lua 形式库的方式

简单介绍一下 lua 加载库的原理, 所谓的库其实就是一些被组织起来的 lua 代码, 为了方便项目管理, 把 lua 代码以库的形式编写. 那么加载一个库其实就是把这个库的代码执行一遍, 首先得找到这个库, lua 中有个约定, 使用这两个变量来指明库文件的路径:

  • lua库地址

    • package.path
  • c 库地址

    • package.cpath

有了上述知识背景, 我们就明白在 Codea 中加载库实际上就是指明库文件所在的位置, 假设我们的库文件是 mylib.lua 我们先把库文件放在一个 Codea 能够访问的位置, 比如 Codea 中的 DocumentsDropbox 下, 然后再在代码中指定这个位置.

一般而言, 如果是多个库文件, 那么我建议专门建一个目录放在 Dropbox, 因为它可以在外部批量操作, 如果只是少数几个库文件, 那么可以手动把它们加入 Documents 中.

具体代码如下:

lib = {}
home = os.getEnv("HOME")
lib.Documents = home.."/Documents"
lib.Dropbox = home.."/Dropbox.assats"

package.path = package.path..";"..lib.Dropbox

mt = require "mytest"

mt.foo()

这里可以打印一下, 看看我们的库放在哪里了:

print(package.path)

尝试加载动态库 dylib

接下来试验一下是否可以通过这种方式加载动态库, 如果可以的话就非常强大了, 我们可以把那些计算量较大的模块写成动态库, 再通过 Codea 中的 lua 来调用

先用 c 编译一个测试用的动态库, 代码如下:

#include <stdio.h>
#include "lauxlib.h"

void foo(lua_State* L)
{
  puts("Hello, I'm a shared library");
}

编译命令如下:

gcc -c -Wall -Werror -fpic foo.c -I/Users/admin/sourceCode/lua-5.3.3/src
gcc -shared -o libfoo.dylib foo.o
```	

我的环境的 `OSX`, 也可以用这个命令来生成库文件, 下面是静态库文件的生成:

libtool -static -o libfoo.a foo.o


接下来就是把生成的库文件 `libfoo.dylib` 和 `libfoo.a` 放到 `Codea` 中, 这次只能放在 `Dropbox` 中, 因为 `Documents` 放不进去.

然后执行跟上面类似的一段代码, 不过这次设置的是 `package.cpath`, 代码如下:

package.cpath = package.path..";"..lib.Dropbox

mt = require "mytest"

mt.foo()


非常遗憾的是, 运行报错了, 提示信息是:

Dynamic Libraries is not enable


至于 `libfoo.a` 就不必试了, 因为静态库是在编译时使用的, 而我们的 `Codea` 处于运行时.

后来查了一下, 发现 `iOS` 不允许把运行时编译好的代码放进内存执行, 只能以解释方式执行 `interpret`. 

##	参考

[Spine2D support for Codea](https://codea.io/talk/discussion/8174/spine2d-support-for-codea)   
[spine 官网](http://zh.esotericsoftware.com)

© 著作权归作者所有

共有 人打赏支持
FreeBlues
粉丝 98
博文 280
码字总数 493678
作品 0
其它
程序员
私信 提问
从零开始写一个武侠冒险游戏-0-开发框架Codea简介

从零开始写一个武侠冒险游戏-0-开发框架Codea简介 概述 本游戏全程使用一款运行于 上的开发工具类 -- 来开发, 是一款 + 的开发工具, 它既是一个: - 也是一个: - 还是一个: - 更是一个: - , 可...

FreeBlues
2016/06/21
69
0
Lua-5.3.2 安装 luasocket 的正确姿势

Lua-5.3.2 安装 luasocket 的正确姿势 打算在我的 里使用一下 , 也就是通过下面这样来加载: 于是搜索了下, 关键字用了, 发现官方的那个站点 里放着的是 , 按照这篇文档lua 5.2.2编译安装 Lu...

FreeBlues
2016/05/23
1K
0
在 OSX 上用 openresty 架设自己的 Git Web Service

在 OSX 上用 openresty 架设自己的 Git Web Service 目录 - 介绍- 下载编译安装 openresty- 启动 openresty- 下载编译运行 sockproc 守护进程- 下载安装运行 codea-scm web 服务- 在 iPad 上...

FreeBlues
2015/06/22
0
0
iPad上用Codea-SCM调用git web services做版本管理

iPad上用Codea-SCM调用git web services做版本管理 目录 - 说明- 安装 Codea-SCM- 远端代码仓库设置- 本地 Codea-SCM 设置 说明 在 iPad 上使用 Codea 做项目开发,虽然调试、修改代码很方便...

FreeBlues
2015/06/11
0
0
Cocea编写的一款3D地牢游戏例程

Cocea编写的一款3D地牢游戏例程 简单介绍:就是一款用 Codea 编写的第一人称视角的 3D 迷宫游戏,你可以用你的 iPad 在这个基础上学习 3D 编程,边修改边查看效果。 这个游戏说明用 Codea 可...

FreeBlues
2014/10/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

深入理解java虚拟机-垃圾收集器与内存分配策略

垃圾收集器与内存分配策略 引用计数法 就是给对象添加一个计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1,计数器为0的对象就是不可能再被使用的。 缺点:无法...

须臾之余
36分钟前
2
0
git 忽略不必要的文件

通过 git 的 ignore 策略来忽略一些不必要的或者是敏感的文件,达到加速开发和保护隐私的效果 文件中配置: 文件夹:/vendor 文件: .env通配符: src/*.js 注意: .gitignore文件只对还没...

echojson
42分钟前
1
0
Python+Appium自动化测试环境搭建

1.Android SDK 下载SDK并配置系统环境变量ANDROID_HOME。 2.Appium 2.1 直接下载安装 官网下载安装appium-desktop-setup.exe。 2.2 通过npm下载安装 appium本质是一个nodejs库所以要先安装n...

维他ViTa
今天
3
0
MacOS安装单机版HBase

MacOS安装HBase,必然是用于测试了,从简入手、从简配置。 直接通过brew安装即可: brew install hbase 成功安装后,验证是否成功,如果不出意外的话,应该有如下输出: RippleMBP:~ userna...

RippleChan
今天
4
0
linux下oracle随操作系统启动而启动

大家一定还记得,我们在windows下安装oracle后,重起windows,数据库会自动启动,但在linux下,如果我们重起了操作系统, 就会发现数据库需要手工去输入,这个本来有好处,让dba知道操作系统已经重起...

突突突酱
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部