目录

Vala使用外部库

准备

使用外部库,需要对应的 vapi 文件。比如:libqrencode.vapi。可以放在源码一起。有两种方法使其有效。

  • 方法1:软链接到系统 vapi 目录。
1
2
⭕ cd  /usr/share/vala-0.56/vapi/
⭕ ln -sf ~/project/clip-qrcode-share/libqrencode.vapi .
  • 方法2:meson 设置搜索 vapi 的目录和参数。
1
2
vapi_dir = meson.current_source_dir()
add_project_arguments(['--vapidir', vapi_dir], language: 'vala')

使用

源码中使用 using Qrencode;,ninja 编译。

1
2
3
 error: The namespace name `Qrencode' could not be found
    3 | using Qrencode;	// depend libqrencode-dev
      |       ^~~~~~~~

meson.buildlib_dependencies 段加上 dependency('libqrencode', version: '>=4.0.0'),

1
/usr/bin/ld: 找不到 /usr/lib/x86_64-linux-gnu/libqrencode.so: 没有那个文件或目录

这是标准的缺少dev库了。安装 libqrencode-dev。才能正常。

1
2
⭕ pfile /usr/lib/x86_64-linux-gnu/libqrencode.so
libqrencode-dev:amd64: /usr/lib/x86_64-linux-gnu/libqrencode.so

问题权衡

调用外部库,需要安装 dev 库进行编译,如 libqrencode-dev。运行时,又需要安装运行库,如 libqrencode4

简单使用时,还不如直接安装实际的软件包 qrencode,反正不大,依赖自动带了运行库,直接 Posix.system 调用,还能产生 png 图片。省得需要自己去使用 cairo 绘制结果。

1
2
3
4
5
⭕ pneed qrencode
qrencode
  依赖: libc6
  依赖: libpng16-16
  依赖: libqrencode4