DolphinDB database 支持动态载入外部插件,以拓展系统功能。插件仅支持使用C++编写,并且需要编译成so共享库或者dll共享库文件。
插件分支应与 DolphinDB Server 版本的前三位数字相匹配,即若 DolphinDB Server 是 1.30.21 版本,插件也应使用以 1.30.21 开头的版本,若 DolphinDB Server 是 2.00.9 版本,插件应使用以 2.00.9 开头的版本,其他版本依此类推。自2.00.9/1.30.21版本起,插件文件中增加了版本号信息。一旦插件与服务器版本号不匹配,在加载插件时会报错并停止加载。请在升级服务器后及时更新相应的插件,且不要随意修改已发布插件txt文件中的版本号。
DolphinDB 目前发布的插件版本为 release200, release130, release120 和 release110,请根据当前使用的服务器版本号进行选择。
在各个插件各自根目录下找到 bin/ 文件夹,里面是已经预编译好的插件。可以选取对应平台的插件进行加载。
使用loadPlugin
函数加载外部插件。该函数接受一个文件路径,该文件描述插件的格式,例如:
loadPlugin("/YOUR_SEVER_PATH/plugins/odbc/PluginODBC.txt");
前提是server的版本>=1.20; 需要预先加载的插件存在。否则sever启动的时候会有异常。多个插件用逗号分离。
preloadModules=plugins::mysql,plugins::odbc
DolphinDB使用一个文本文件来描述插件。该文件格式如下:首行描述插件名字和共享库文件名,其后每一行都描述一个共享库函数和DolphinDB函数的映射关系。
module name, lib file, plugin version
function name in lib, function name in DolphinDB, function type, minParamCount, maxParamCount, isAggregate
...
...
解释:
PluginDemo.txt:
demo,libPluginDemo.so,2.00.10
minmax,minmax,operator,1,1,0
foo,foo,system,1,1,0
以上描述文件定义了一个名为 demo 的插件,共享库文件名为 libPluginDemo.so。插件版本号为2.00.10。插件导出两个函数,第一个函数为minmax
,该函数在DolphinDB中名字同样是minmax
,operator类型,接受一个参数;第二个函数名字为echo
,DolphinDB中名字同样是echo
,system类型,接受一个参数。
写完描述文件之后,即可开始编写插件。内容请参考demo文件夹内容。
编译需要用到DolphinDB的核心库 libDolphinDB.so 或 libDolphinDB.dll,该核心库实现了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 -lDolphinDB -L/home/DolphinDB_Linux64_V1.20.0/server
请注意:
- 插件分支应与DolphinDB Server的版本相匹配,即若DolphinDB Server是1.00版本,插件应用release100分支,若DolphinDB Server是1.10版本,插件应该用release110分支,其他版本依此类推,server最新版匹配插件master分支。
- 为了兼容旧的编译器,libDolphinDB.so编译时使用了-D_GLIBCXX_USE_CXX11_ABI=0的选项,因此用户在编译插件的时候也应该加入该选项。若server是ABI=1的最新版,可不加。
- 上面命令中编译选项-L的路径,应根据DolphinDB动态库的实际路径修改。
编译成功后,目录下会生成一个名为 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不兼容的问题。此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。