DolphinDB database 支持动态载入外部插件,以拓展系统功能。插件仅支持使用 C++ 编写,并且需要编译成 so 共享库或者 dll 共享库文件。
插件共享库依赖 include 目录中声明的类及接口,因此在编译插件时,必须确保插件分支应与 DolphinDB 版本的前三位数字相匹配,即若 DolphinDB 是 1.30.21.x 版本,插件应使用 1.30.21.x,若 DolphinDB 是 2.00.9.x 版本,插件应使用 2.00.9.x,其他版本依此类推。加载插件时也要保持版本匹配。
DolphinDB 使用一个文本文件来描述插件。该文件格式如下:首行描述插件名字和共享库文件名,其后每一行都描述一个共享库函数和 DolphinDB 函数的映射关系。
module name, lib file, plugin version
function name in lib, function name in DolphinDB, function type, minParamCount, maxParamCount, isAggregate, isSequential
...
...
解释:
DolphinDB 官方开发并发布了多种插件,用户可通过插件市场直接下载安装。可通过如下步骤下载并安装插件:
(1) 在 DolphinDB 客户端中使用 listRemotePlugins 命令查看插件仓库中的插件信息。
login("admin", "123456")
listRemotePlugins()
注意:如果仅展示当前操作系统和 server 版本支持的插件。若无预期插件,您可以通过我们的 GitHub 仓库(选择对应版本分支)下载源代码自行编译。编译方法参考第5章编译。
(2) 使用 installPlugin 命令安装插件。
installPlugin("mysql")
加载插件时需要确保插件分支应与 DolphinDB Server 版本的前三位数字相匹配,一旦版本号不匹配,在加载插件时会报错并停止加载。请在升级服务器后及时更新相应的插件,且不要随意修改已发布插件 txt 文件中的版本号。
loadPlugin
函数加载插件可使用 loadPlugin
函数加载外部插件。为该函数传入一个文件路径参数,指定插件的位置,例如:
loadPlugin("/YOUR_SERVER_PATH/plugins/odbc/PluginODBC.txt");
注意:自 Server 版本 2.00.11 / 1.30.23 起,loadPlugin
支持直接使用插件名称(大小写敏感)。系统将根据插件名称和配置参数 pluginDir
自动加载插件。
loadPlugin("odbc");
也可以通过配置参数 preloadModules 自动加载。需要确保预加载的插件必须实际存在,否则会在服务器启动时抛出异常。多个插件名称可使用英文逗号,
分隔,例如:
preloadModules=plugins::mysql,plugins::odbc
本节以开发一个 demo 插件为例,详细介绍如何编译插件。
在开始编译 DolphinDB 插件前,请确保以下依赖项和环境配置已准备完毕:
C++ 编译器:必须使用与 DolphinDB Server 版本兼容的 g++ 版本,详见下表。
DolphinDB 头文件:下载并使用与 DolphinDB Server 版本一致的插件分支中的 include/ 目录。
DolphinDB 动态库:Windows 平台编译时,需要用到 libDolphinDB.dll。
编译器版本要求(按运行环境区分)
操作系统类型 | DolphinDB Server 版本 | 推荐 g++ 版本 |
---|---|---|
Linux/Linux_JIT | 2.00.x、3.00.0.x、3.00.1.x | g++ 4.8.5 |
Linux/Linux_JIT | 3.00.2 及以上 | g++ 8.4.0 |
Linux_ABI | 2.00.x、3.00.0.x、3.00.1.x | g++ 6.2.0 |
Linux_ABI | 3.00.2 及以上 | g++ 8.4.0 |
编译插件时建议添加以下宏:
LOCKFREE_SYMBASE
:启用 SymbolBase 类的优化;_GLIBCXX_USE_CXX11_ABI=0
:为了兼容老版本编译器,编译 libDolphinDB.so 时默认使用了 _GLIBCXX_USE_CXX11_ABI=0
选项,因此用户在编译插件时也应该加上该选项。若使用的是开启 ABI=1
的服务器,则可以省略;LINUX
: 指定系统版本为 Linux。demo,libPluginDemo.so,2.00.10
minmax,minmax,operator,1,1,0
foo,foo,system,1,1,0
以上描述文件 PluginDemo.txt 定义了一个名为 demo 的插件,共享库文件名为 libPluginDemo.so。插件版本号为2.00.10(请根据实际使用的插件版本进行修改)。该插件导出两个函数:
minmax
:在 DolphinDB 中注册为 minmax
,类型为 operator,接受一个参数。foo
:在 DolphinDB 中注册为 foo
,类型为 system,同样接受一个参数。写完描述文件之后,即可开始编写插件。内容请参考 demo (./demo) 文件夹内容。
编译需要用到 include 头文件,请提前选择正确的分支下载文件。编译步骤如下(以在 Linux 操作系统上编译为例):
cd demo
g++ -DLINUX -fPIC -std=c++11 -D_GLIBCXX_USE_CXX11_ABI=0 -DLOCKFREE_SYMBASE -c src/Demo.cpp -I../include -o Demo.o
g++ -fPIC -shared -o libPluginDemo.so Demo.o
编译成功后,目录下会生成一个名为 libPluginDemo.so 的共享文件。
在 DolphinDB 的控制台中输入下列命令加载插件并使用:
>loadPlugin(PluginDemo.txt的路径); // 加载插件
(minmax,echo)
>use demo; // 引入插件的命名空间
>demo::minmax([12,3,4]); // 也可以使用minmax([12,3,4])
[3,12]
>demo::echo("foo");
foo
>echo(1);
1
更复杂的插件实现请参考 odbc 目录下的内容。
gcc
版本和编译 libDolphinDB.so 或 libDolphinDB.dll 的版本保持一致,以免出现不同版本的编译器 ABI 不兼容的问题。此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。