首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

lua 和c的调用

当执行到require “dylib.test”时,lua解析器会去dylib/test.so文件中寻找并执行函数名为luaopen_dylib_test的函数。.../dylib/test.so: undefined symbol: luaopen_dylib_test stack traceback: [C]: in ?...对于一个Lua文件来说,我们可以很轻易的改掉它的名称,但是对于一个C程序库来说,我们是没有办法编辑其中的luaopen_函数的名称的。...为了这种重命名的需求,require用到了一个小的技巧:如果一个模块名中包含了连字符,require就会用连字符后的内容来创建luaopen_*函数名。...比如:如果一个模块的名称为a-b,require就会认为它的open函数名为luaopen_b,并不是luaopen_a-b。现在好了,对于上面提出的不同版本进行测试的需求,就可以迎刃而解了。

60620

Lua连续教程之Lua线程和状态

原因有两个,其一是IOS C没有提供这样的功能,因此也没有可移植的方法能在Lua中实现这种机制: 其二,也是更重要的原因,在于我们认为在Lua中引入多线程不是一个好主意。 多线程一般用于底层编程。...因为这些代码只使用了一些基础功能,所以将它们移植到其他线程系统中并不难。 我们要开发的系统很简单,其主要目的是演示一个多线程环境中使用多个Lua状态。...在这个系统开始运行之后,我们可以为它添加几个高级功能。我们把这个库称为lproc,它只提供4个函数: lproc.start(chunk) 启动一个新进程来运行指定的代码段(一个字符串)。...); registerlib(L,"table",luaopen_table); registerlib(L,"io",luaopen_io); registerlib(L,"os",luaopen_os...在POSIX线程中,可以用pthread_cond_timedwait实现这个功能

2.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

Lua中模块和包

这些规则不需要从语言中引入额外的功能,程序猿可以使用目前为止我们学习到的机制实现这些规则。程序员也可以自由地使用不同的策略。...使用表来实现模块的显著优点之一是,让我们可以像操作普通表那样操作模块,并且能利用Lua语言的所有功能实现额外的功能。...而在Lua语言中,我们则可以轻易地实现这些功能。 例如,用户调用模块中的函数就有几种方法。...例如,如果一个模块的名称为mod-v3.4,那么函数require会认为该模块的加载函数应该是luaopen_mod而不是luaopen_mod-v3.4(这也不是有效的C语言函数名)。...例如,一个静态链接到Lua中的C标准库可以将其luaopen函数注册到表preload中,这样luaopen函数只有当用户加载这个模块时才会被调用。用这种方式,程序不会为没有用到的模块浪费资源。

66830

在Lua中调用C语言

由于ISO C中没有具备这种功能的函数,因此Lua没有在标准库中提供这样的函数。这里,我们假设使用一个POSIX兼容的操作系统。这个函数以一个目录路径字符串作为参数,返回一个列表,列出该目录下的内容。...然后,函数luaopen_mylib返回1,表示将这个表返回给Lua。 编写完这个库以后,我们还必须将其链接到解释器。如果Lua解释器支持动态链接的话,那么最简便的方法是使用动态链接机制。...动态链接器必须知道函数luaopen_mylib的名字才能找到它。它总是寻找名为”luaopen + 模块名”这样的函数。...因此,如果我们的模块名为mylib,那么该函数应该命名为luaopen_mylib。 如果解释器不支持动态链接,就必须连同新库一起重新编译Lua语言。...一个简答的做法是把luaopen_mylib添加到由lua_openlibs打开的标住库列表中,这个列表位于文件linit.c中。

3.7K20

【IOS开发高级系列】Lua与OC交互专题

交互原理 用Lua编写iOS程序 http://blog.csdn.net/justinjing0612/article/details/8816678 IOS中如何调用LUA,以及LUA如何调用IOS中的功能...这种转换功能强大,甚至可以处理复杂的Objective-C特性,比如选择器。         你可以利用所有上述特性。不需要精挑细选。你获得所有特性!...NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];           wax_start("AppDelegate.lua", luaopen_wax_http..., luaopen_wax_json, luaopen_wax_filesystem, nil);       int retVal = UIApplicationMain(argc, argv, nil...但是Lua可以很容易地被扩展:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。事实上,现在已经有很多成熟的扩展模块可供选用。

24620
领券