#plugin #shared #cdylib #symbols #plugin-style

cdylib-plugin

支持插件风格cdylib包

7个版本

0.1.6 2020年5月13日
0.1.5 2020年5月12日

#8#cdylib

PostgreSQL OR MIT

5KB

cdylib-plugin.rs

简介

插件风格共享库是为特定主机程序设计的共享库。主机程序调用插件,插件回调用主机程序的API。重要的是,这意味着插件引用仅在主机程序中定义的符号;并且在插件构建时这些符号没有定义。

例如,一个PostgreSQL扩展(使用插件风格共享库)可能使用SPI在运行的服务器中当前事务中执行查询。如SPI_connect之类的符号在PostgreSQL中定义,并由插件引用。这些符号在插件加载时解决,但不能在插件构建时解决。

问题

在Rust中,插件风格cdylib包存在两个问题

  1. #62874 在某些平台上,由于未定义的符号,链接在构建时失败,除非传递特殊参数给链接器。
  2. #8193 没有好的方法来查找创建的库的路径。
    1. 使得集成测试困难。
    2. 使得安装困难。

解决方案

希望这些问题在未来得到妥善解决。在此之前,cdylib-plugin.rs提供了解决这些问题的解决方案。

将正常依赖项和构建依赖项添加到您的crate中

[dependencies]
# ...
cdylib-plugin = "0.1"

[build-dependencies]
# ...
cdylib-plugin = "0.1"

在您的crate中添加一个build.rs,例如

extern crate cdylib_plugin;

fn main() {
	// ...
	cdylib_plugin::buildflags();
}

在您的集成测试或安装代码中,使用cdylib_plugin::cdylib_path()找到库路径。

无运行时依赖