Vala 多用途库制作

库可以通过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

1namespace HelloObject{ 2 3public string fun() { 4 return "HelloWorld"; 5} 6 7}

编译步骤:
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

1var gir = require("gir"); 2 3gir.init(); 4 5var HelloObject = gir.load("HelloObject"); 6 7console.log(HelloObject.fun());

test

1#!/bin/bash 2 3export GI_TYPELIB_PATH=`pwd` 4export LD_LIBRARY_PATH=`pwd` 5 6node hellotest.js
点赞
收藏

评论区

加载中...

相关推荐

Linux和Windows平台 动态库.so和.dll文件的生成

Linux动态库的生成1、纯cpp文件打包动态库将所有cpp文件和所需要的头文件放在同一文件夹,然后执行下面命令gccsharedfpic\.coxxx.so;gstdc17fpic\.cppoxxx.so;\C17标准,需要高版本gcc,本人采用gcc8.2.0\

Mysql —— linux下使用c语言访问mySql数据库

在Linux编写完c代码运行出现没有找到mysql.h是因为没有指定头文件的位置和库文件的位置。命令:gcc\I/usr/include/mysqlXXXX.c\L/usr/lib/mysqllmysqlclientoXXXXXXXX.c:你要编译的文件;XXXX:编译完的文件名;(详解:需要在gcc编译时指定头文件地

Linux系统的头文件和库文件搜索路径

Include的header文件,连结数据库,系统定义,总共有下列来源指定gcc去那找。当初在编译时指定的(在~gcc/gcc/collect2.c:locatelib()写在specs内的后来用DIL指定的gcc环境变量设定(编译的时候)ld.so的环境变量(这是runtime的时候)一、头文件gcc在编译时如何去

Python常用模块

一、什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。  但其实import加载的模块分为四个通用类别:   1使用python编写的代码(.py文件)  2已被编译为共享库或DLL的C或C扩展  3包好一组模块的包  4使用C编写并链接到

QT开发——动态库(.so文件)的生成与调用

1.qmake方式生成和调用动态库链接:https://blog.csdn.net/lywzgzl/article/details/428059912.cmake方式生成和调用动态库2.1创建共享库项目Cmake新建一个QtCreator项目,在C

Robot Framework中使用C库

Robot框架如何使用C库介绍这里通过一个简单的例子,演示如何在RobotFramework的测试库中使用C语言。我们使用Python标准库中的ctypes模块(对于早期Python版本可能未集成,需要另行安装),该模块需要调用C代码编写的共享库。当前的例子我仅在OSX上实现与测试,对于Unix和Linux平