首页 > 其他 > 详细

Vala 多用途库制作

时间:2015-10-04 08:53:13      阅读:278      评论:0      收藏:0      [点我收藏+]

 库可以通过JavaScript, Python, Lua, Ruby 中的gi模块调用

valac 编译时先生成对应的C文件然后再交给gcc编译
所生成的共享库与C编译生成库一致(C convention function call)

库制作过程中涉及主要文件类型:
.so 共享库
.h   共享库描述文件(C convention)
.vapi Vala使用库描述文件
.gir 供gi 使用的库描述文件的(XML格式)
.typelib 供gi 使用的库描述文件(gtypelib格式)

调用依赖:
通过其他语言对应的gir调用 --->  typelib ---> *.so
通过vala使用 ---> *.vapi ---> *.h ---> *.so

通过C使用 ---> *.h ---> *.so

例子:
HelloObject.vala

namespace HelloObject{
 
public string fun() {
    return "HelloWorld";
}
 
}

编译步骤:
1、制作vala动态库,输出相关的.gir,.vapi以及.h
valac -X -fPIC -X -shared --library=HelloObject --gir=HelloObject-0.1.gir -H hellotestlib.h -o libHelloObject.so HelloObject.vala

-X -fPIC  编译为位置无关
-X -shared 编译为共享库
--library vala库文件输出开关,需要同时指定目标vala库的名字,即输出HelloObject.vapi
--gir GI库文件名字
-H 输出目标库的头文件
-o 指定共享库的名字

2、将对应的gir编译为typelib
g-ir-compiler --shared-library=libHelloObject.so --output=HelloObject-0.1.typelib HelloObject-0.1.gir

--shared-library 共享库的名字
--output 输出的typelib名字

Javascript调用测试

hellotest.js

var gir = require("gir");
 
gir.init();
 
var HelloObject = gir.load("HelloObject");
 
console.log(HelloObject.fun());

test

#!/bin/bash
 
export GI_TYPELIB_PATH=`pwd`
export LD_LIBRARY_PATH=`pwd`
 
node hellotest.js


Vala 多用途库制作

原文:http://my.oschina.net/soiamsoNG/blog/513399

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!