Linux下编写Lua扩展so文件和调用方法实例_Lua

复制代码 代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
#include <string.h>
 
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <limits.h>
 

#include <math.h>
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"

/*  库 open 函数的前置声明   */
int luaopen_mylib(lua_State *L);

static int l_sin (lua_State *L)
{
double d = luaL_checknumber(L, 1);
lua_pushnumber(L, sin(d));
//printf("ok now is  luahook!\n");
return 1; /* number of results */
}

static const luaL_Reg mylib[] =
{
{"lsin", l_sin},
{NULL, NULL} /* 必须以NULL结尾 */
};

 int luaopen_mylib(lua_State *L)
{
  luaI_openlib(L, "mylib", mylib, 0);
return 1;
}

如果是.cpp文件,在luaopen_mylib一定要加 extern "C", 否则导出的函数会被重命名,切记切记

编译:gcc mylibs.c -fPIC -shared -o libmylib.so -llua

复制代码 代码如下:

Makefile文件
CXX =gcc
LIBNAME:=libmylib.so
HDRNAME:=mylibs.c
TARGETNAME:=mylibs
CNAME:=$(patsubst %,%.c,$(TARGETNAME))
ONAME:=$(patsubst %,%.o,$(TARGETNAME))
all:libmylib
libmylib: $(ONAME)
$(CXX) -g -shared -Wl,$(LIBNAME) \
-o $(LIBNAME) $(ONAME) -llua
%.o: %.c
$(CXX) -fPIC -c -Wall $(CNAME)clean:$(RM) *.o *.so

lua调用脚本:

复制代码 代码如下:

local one, two, three = package.loadlib("libmylib.so", "luaopen_mylib")()
print(mylib.lsin(10))

时间: 2024-10-31 15:03:03

Linux下编写Lua扩展so文件和调用方法实例_Lua的相关文章

Linux下编写Lua扩展so文件和调用方法实例

  这篇文章主要介绍了Linux下编写Lua扩展so文件和调用方法实例,本文给出C语言代码.编译SO文件.Lua中调用代码实例,需要的朋友可以参考下 代码如下: #include #include #include #include #include #include #include #include #include #include #include "lua.h" #include "lualib.h" #include "lauxlib.h&qu

linux下安装php扩展memcache的方法_Linux

memcache 的工作就是在专门的机器的内存里维护一张巨大的hash表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率,减轻后端数据库的读写压力. 实验环境:centos 6.6 x86_64 LAMP环境搭建完毕:php版本5.6.8.apache版本2.4.12    1.在安装memcached之前需要安装libevent支持: # wget http://syslab.comsenz.com/downloads/linux/libevent-1.4.12-stable.

LINUX下PHP程序实现WORD文件转化为PDF文件的方法_php技巧

本文实例讲述了LINUX下PHP程序实现WORD文件转化为PDF文件的方法.分享给大家供大家参考,具体如下: <?php set_time_limit(0); function MakePropertyValue($name,$value,$osm){ $oStruct = $osm->Bridge_GetStruct("com.sun.star.beans.PropertyValue"); $oStruct->Name = $name; $oStruct->V

Linux有问必答:如何在Linux下重命名多个文件

Linux有问必答:如何在Linux下重命名多个文件 提问:我知道我可以用mv命令重命名文件.但是当我想重命名很多文件怎么办?如果为每个文件都这么做将会是很乏味的.有没有办法一次性重命名多个文件? 在Linux中,当你想要改变一个文件名,使用mv命令就好了.然而mv不能使用通配符重命名多个文件.可以用sed.awk或者与xargs结合使用来处理多个文件的情况.然而,这些命令行即繁琐又不友好,并且如果不小心的话还很容易出错.你不会想要撤销1000个文件的错误名吧! 当你想要重命名多个文件的时候,r

linux下svn提交忽略某些文件、目录(ignore属性

 svn也是一个目录同步了我们可以用它来做版本控制了,下面一起来看看关于linux下svn提交忽略某些文件.目录(ignore属性),希望例子对各位有帮助.     在项目中,有些文件是不需要将本地的提交到svn仓库,例如config.php文件,特别是定义了绝对路径的,或者是缓存目录.图片目录等,所以为了方便,在每次提交svn的时候,都需要忽略这些文件.目录,避免不慎提交引起团队中其他成员需要修改其本地的版本. linux下用svn propedit svn:ignore命令可以编辑忽略文件.

Linux下SVN服务器自动更新文件到Web目录的方法_Linux

说明: 服务器操作系统:CentOS 服务器IP:192.168.21.134 SVN安装路径:/usr/local/svn SVN项目路径:/home/svn SVN登录账号:osyunwei SVN登录密码:123456 Web站点根目录:/home/web实现目的: 当svn项目中有任何修改更新时,系统会自动实时从svn中检出文件并同步到Web站点根目录 具体操作: 一.使用SVN中post-commit实现自动实时从svn中检出文件并同步到Web站点根目录 cd /home/svn/ho

[20131226]linux下使用pigz高效传输文件.txt

[20131226]linux下使用pigz高效传输文件.txt http://zlib.net/pigz/ pigz, which stands for parallel implementation of gzip, is a fully functional replacement for gzip that exploits multiple processors and multiple cores to the hilt when compressing data. pigz was

Linux下查看SELinux状态和关闭SELinux的方法

Linux下查看SELinux状态和关闭SELinux的方法  一.查看SELinux状态命令: 1./usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态 SELinux status:                 enabled 2.getenforce                 ##也可以用这个命令检查 二.关闭SELinux方法: 1.临时关闭(不用重启机器): 代码如下: setenforce 0 #设置SE

Linux下Oracle删除用户和表空间的方法_oracle

本文实例讲述了Linux下Oracle删除用户和表空间的方法.分享给大家供大家参考,具体如下: 1.删除某个用户 SQL> conn /as sysdba Connected. SQL> drop user userName cascade; 用户已删除 如果用户无法删除,并报错: ERROR at line 1: ORA-01940: cannot drop a user that is currently connected 通过查看用户的进行,并kill用户进程,然后删除用户. SQL&