本文以window 10為例,介紹了如何用CLion和CMake搭建DolphinDB外掛程式開發環境,然後結合例項講解如何用CLion偵錯外掛程式程式碼,以幫助初學者快速入門DolphinDB外掛程式開發。Clion能Attach DolphinDB節點行程並用圖形界面進行偵錯,相比gdb的命令列偵錯,簡單友好,大大降低了開發者偵錯DolphinDB外掛程式的難度。
1 環境準備
1.1 安裝和配置MinGW
MinGW中包含gcc,g++等多種編譯器,可從其官網下載,下載時請選擇 x86_64-posix-seh 版本(posix表示啟用了C++ 11 多執行緒特性,seh表示異常分支處理零開銷,以與DolphinDB server保持一致),然後手動添加環境變量。下載地址:
為節省篇幅,具體的安裝細節請參閱:windows下安裝mingw-w64 - tnnmigga - 部落格園 。
1.2 安裝CMAKE
下載連結: https:// cmake.org/download/
選擇一個字尾為.msi的安裝包下載,如下圖劃線所示:
下載後雙擊安裝,安裝時記得勾選「Add CMake to the system PATH for all users」,這樣就不用自己再配置環境變量了。
安裝後按win+r執行cmd或者powershell輸入cmake -v,出現如下圖所示版本資訊即表明安裝成功:
1.3 CLion安裝
下載連結:https://www. jetbrains.com/clion/dow nload
選擇windows .exe下載,下載後滑鼠雙擊CLion-2021.2.3.exe(我下載的版本是2021.2.3,版本不同,檔名相應而變),然後一路點選Next即可完成安裝,非常簡單。
安裝後,開啟CLion,進入下圖點選Activate CLion輸入啟用碼,或點選Start trial開始試用。CLion是收費軟體,可以點選下圖中的Buy license購買啟用碼,若是教師或學生,可以申請Free Educational Licenses免費使用。
1.4 安裝Git
下載連結:Git - Downloading Package
下載後雙擊一路預設安裝即可,在cmd中執行git --version,顯示如下圖所示版本資訊即表明安裝成功。
1.5 部署DolphinDB集群和客戶端軟體
若本機沒有部署DolphinDB節點和GUI客戶端。請按單節點部署教程部署和啟動一個單節點,版本選擇目前最新版1.30.14版本。GUI請從官網下載頁面的
其它資源下載
列表第一個連結獲取GUI的安裝包,並按客戶端軟體教程和啟動。
2 下載外掛程式程式碼
外掛程式程式碼連結:dolphindb/DolphinDBPlugin
其中的include子目錄包含了DolphinDB的核心數據結構的類別宣告和一些工具類別宣告,這些類是實作外掛程式的重要基礎工具。其他子目錄如odbc與mysql等包含了ODBC與MySQL等各外掛程式的源碼,在我們寫外掛程式時可參考它們的實作方法。
如下圖所示,在cmd中執行git clone -b release130 https:// gitee.com/dolphindb/Dol phinDBPlugin.git 即可下載。
註意:外掛程式分支應與DolphinDB Server的版本相匹配,即若DolphinDB Server是1.30版本,外掛程式套用release130分支,若DolphinDB Server是2.00版本,外掛程式應該用release200分支,其他版本依此類推。3 編寫一個外掛程式
3.1 案例需求
匯入二進制格式的level2股票行情檔到資料庫中,這些股票行情數據檔有個特點,就是每個檔中包含:快照、逐筆成交和逐筆委托三種型別數據,我們需要把不同型別的數據分別倒入不同的表中。檔儲存格式如下:
struct zb_tick
{
int type;
union
{
struct ss_quote hq;
struct ss_transaction ts;
struct ss_order_onebyone o_one;
} data;
};
其中type為0時,表示快照數據,type為2時表示逐筆成交數據,type為3時表示逐筆委托數據。具體格式參見
樣本數據檔參見
3.2 編寫外掛程式格式檔
3. 2.1 基本概念
外掛程式函式分運算子函式(operator function)和系統函式(system function)2種型別,區別在於,前者接受的參數個數小於等於2,而後者可以接受任意個參數,並支持會話的存取操作。
開發一個運算子函式,需要編寫一個原型為 ConstantSP (const ConstantSP& a, const ConstantSP& b) 的C++函式。當函式參數個數為2時,a 和 b 分別為外掛程式函式的第一和第二個參數;當參數個數為1時,b 是一個占位符,沒有實際用途;當沒有參數時,a 和 b 均為占位符。
開發一個系統函式,需要編寫一個原型為 ConstantSP (Heap* heap, vector& args) 的C++函式。使用者在DolphinDB中呼叫外掛程式函式時傳入的參數,都按順序保存在C++的向量 args 中。heap 參數不需要使用者傳入。
函式原型中的 ConstantSP 可以表示絕大多數DolphinDB物件(純量、向量、矩陣、表,等等)。其他常用的衍生自它的變量型別有 VectorSP(向量)以及 TableSP(表)等。
3.2.2 格式要求
DolphinDB使用一個文字檔案來描述外掛程式。該檔格式如下:首行描述外掛程式名字和共享庫檔名,其後每一行都描述一個共享庫函式和DolphinDB函式的對映關系。
module name, lib file
function name in lib, function name in DolphinDB, function type, minParamCount, maxParamCount, isAggregate
其中:
3.2.3 案例格式設計
格式檔內容如下:
loadBinaryQuotes,libPluginLoadBinQuotes.dll
getTables,loadBin,system,1,1,0
即設計模組名為loadBinaryQuotes,共享檔庫檔名為libPluginLoadBinQuotes.dll(若linux下為libPluginLoadBinQuotes.so),共享庫中匯出的函式名為getTables,DolphinDB中的對應函式名為loadBin,此函式為系統函式,參數為1個,非聚合函式。
3.3 用CLion建立工程
步驟1.先在建立DolphinDBPlugin目錄下建立loadBinaryQuotes子目錄,把3.2節設計的格式檔放到這個子目錄下,並建立一個子目錄src用於存放原始碼檔,把3.1節提到的cy_struct.h放到src目錄下。
步驟2. 開啟CLion,點選New project,然後選擇在左側欄選擇C++ Library,在右欄輸入如下:
在上圖中輸入完成後,點選右下角的Create,這時會彈出一個對話方塊說目錄下非空,選擇Create from Existing Sources即可。
這時CLion會生成工程如下圖:
它自動生成了library.h/.cpp和CMakeLists.txt。如果我們點選選單Build/Build Project,是能編譯成功的。但這裏我們不要library.h/.cpp,所以選中它們,點滑鼠右鍵,delete它們。然後在src目錄下添加2檔export.h和export.cpp。
export.h主要用於匯出動態庫的函式,主要內容如下:
extern "C" ConstantSP getTables(Heap *heap, vector<ConstantSP> &args);
export.cpp主要用於實作外掛程式函式getTables。兩個檔具體參見:
3.4 修改CMake檔CMakeList.txt
編寫CMakeList.txt需要理解CMake的語法,學習CMake語法推薦透過例子學習CMake ,這是中譯本,英語好的可直接學原計畫例子。這裏最簡單的辦法是參考已有外掛程式的寫法,比如opcua、mqtt等。修改本工程的cmake檔如下:
cmake_minimum_required(VERSION 3.20)#最低CMake版本
project(loadBinaryQuotes)# 工程名
if (WIN32 OR MINGW)
set (platform_macro "-DWINDOWS")
set (plugin_file "${CMAKE_CURRENT_LIST_DIR}/PluginLoadBinQuotes_win.txt")
elseif (UNIX)
set (platform_macro "-DLINUX")
set (plugin_file "${CMAKE_CURRENT_LIST_DIR}/PluginLoadBinQuotes.txt")
#為了相容舊的編譯器,libDolphinDB.so編譯時使用了-D_GLIBCXX_USE_CXX11_ABI=0的選項,因此使用者在編譯外掛程式的時候也應該加入該選項。若server是ABI=1的最新版,可不加。
add_compile_options("-D_GLIBCXX_USE_CXX11_ABI=0")
endif ()
message("platform: ${platform_macro}")
#添加編譯選項:-std=c++11 -fPIC -DWINDOWS(linux系統為-DLINUX)
add_compile_options("-std=c++11" "-fPIC" ${platform_macro} "-Wall")
#包含目錄
include_directories("../include")
include_directories("./src")
#包含庫目錄,libDolphinDB.dll所在目錄,即安裝DolphinDB的目錄,請根據實際安裝位置修改
link_directories(C:/DolphinDB/DolphinDB_Win64_V1.30.14/server)
#庫的原始檔export.cpp生成動態庫PluginLoadBinQuotes
add_library(PluginLoadBinQuotes SHARED ./src/export.cpp)
#連結庫
target_link_libraries(PluginLoadBinQuotes DolphinDB )
#拷貝PluginLoadBinQuotes_win.txt(if windows)/PluginLoadBinQuotes.txt(if Linux)到build目錄(這裏為cmake-build-debug子目錄)
add_custom_command( TARGET PluginLoadBinQuotes POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${plugin_file} ${CMAKE_BINARY_DIR}/PluginLoadBinQuotes.txt
COMMENT "copy PluginLoadBinQuotes.txt")
修改後,建議重新生成Makefile:點選下圖中1位置的CMake,然後點選2位置的圖示,在彈出選單項中選擇Reset Cache and Reload Project。
然後就可選擇主選單Build->Rebuild project了,若程式碼沒問題,就能在cmake-build-debug目錄下生成libPluginLoadBinQuotes.dll了。
4 偵錯程式碼
4.1 偵錯環境準備
loadPlugin("C:/DolphinDB/plugin/DolphinDBPlugin/loadBinaryQuotes/cmake-build-debug/PluginLoadBinQuotes.txt")
外掛程式格式檔路徑根據實際情況修改。
4.2 用CLion單步偵錯
步驟1.Attach行程:先點選CLion主選單Run->Attach to process,在彈出的對話方塊中選擇或輸入dolphindb,如下圖所示:
attach成功後,顯示界面如下:
此時我們就可以debug了。
步驟2.設定斷點:如下圖,滑鼠點選紅色圓弧處即在第12行設定了一個斷點。
步驟3:在GUI中執行下列指令碼:
t=loadBinaryQuotes::loadBin("C:/DolphinDB/plugin/DolphinDBPlugin/loadBinaryQuotes/600519.SH.dat")
步驟4:這時再回到CLion界面,可看到程式已執行到如下圖紅圈所示斷點處:
這時可點選上圖紅色方框處的偵錯按鈕進行step over、step into、Run to cursor等操作。在其底下檢視中也可檢視函式堆疊以及變量的值。
偵錯成功,就可以在GUI中執行t[key]比如t[`snapShot]看到匯入到記憶體表中的數據了。
5. 說明
本文講解了win10上的偵錯環境搭建和程式碼偵錯,若你需要在linux上開發,建議在linux上安裝GNOME 或 KDE desktop,CLion支持在GNOME 或 KDE 上執行,偵錯也如同在windows上一樣友好。
本文未詳細講解外掛程式程式碼如何編寫,有興趣者請參閱DolphinDB外掛程式開發教程 和DolphinDB外掛程式開發深度解析 。
附錄
完整工程程式碼:
連結: https:// pan.baidu.com/s/16B7dva PrHQiAbuMbByF3Vw 提取碼: xvg7