如何在 Vala 中导入其他文件?
Posted
技术标签:
【中文标题】如何在 Vala 中导入其他文件?【英文标题】:How can I import other files in Vala? 【发布时间】:2013-12-25 19:35:31 【问题描述】:这个问题几乎说明了一切——我如何将file2.vala
导入到file1.vala
?
【问题讨论】:
【参考方案1】:你不直接做。如果你运行valac file1.vala file2.vala
,就好像你把它们编译成一个大文件一样。
如果您想让它们可重复使用,那么您可能需要一个共享库。在这种情况下,您编译一个以生成 C 头文件和 VAPI 定义:
valac --vapi file1.vapi -H file1.h --library libfile1.so file1.vala
第二个可以消费这个:
valac --pkg file1 file2.vala
这假定 VAPI 文件已安装。如果不是这种情况,您需要传递--vapidir
和file1.vapi
所在的位置,可能是.
。同样,您需要通知 C 编译器 file1.h
与 -X -I/directory/containing
的位置,同样,可能是 -X -I.
。最后,您需要通过-X -L/directory/containing -X -lfile1
告诉C 链接器libfile1.so
在哪里。这是一个小平台特定的,您可以使用 AutoMake 消除差异,尽管这涉及更多。 Ragel 是如何将 AutoMake 与 Vala 一起使用的常用项目。
【讨论】:
【参考方案2】:只是为了供应apmasell:
您可以通过使用类和公共变量来使用多个文件:
main.vala:
extern void cfunction(string text);
void main ()
first f = new first ();
f.say_something(f.mytext);
cfunction("c text\n");
class.vala:
public class first
public string mytext = "yolo\n";
public first ()
stdout.printf("text from constructer in first\n");
public void say_something(string text)
stdout.printf("%s\n", text);
文本.c:
#include <stdio.h>
void cfunction(const char *s)
puts("This is C code");
printf("%s\n", s);
编译为:valac class.vala main.vala text.c
如您所见,您甚至可以使用 C 代码
【讨论】:
以上是关于如何在 Vala 中导入其他文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用来自其他命名空间的对象以及如何在 PHP 中导入命名空间