CTP_API Linux封裝64位的Java_CTP_API

一、步驟1:下載Linux_64_CTP_API

交易接口和行情接口同時配置,將下載好的文件命名爲:MdUserapi_linux64行情接口、Tradeapi_linux64交易接口,此文件下的目錄如下:(此處文件名字可以自定義,包括下面的文件名字也是一樣的,但是配置核心和關鍵步驟不能有錯誤,形散而神凝)


二、步驟2:利用swig開發工具生成jar(windows和Linux這一步是相同的)

關於swig點擊打開鏈接

MdUserapi_linux64Tradeapi_linux64  分別  創建thostmduserapi.ithosttraderapi.i文件,注意裏面爲英文引號。

1、thostmduserapi.i文件內容:

%module(directors="1")thostmduserapi
%include "various.i"
%apply char **STRING_ARRAY { char *ppInstrumentID[]};
%{
#include "ThostFtdcMdApi.h"
%}
%feature ("director") CThostFtdcMdSpi;
%include "ThostFtdcUserApiDataType.h"
%include "ThostFtdcUserApiStruct.h"
%include "ThostFtdcMdApi.h"

2、thosttraderapi.i文件內容:

%module(directors="1") thosttradeapi
%{
#include "ThostFtdcTraderApi.h"
%}
%feature("director") CThostFtdcTraderSpi;
%include "ThostFtdcUserApiDataType.h"
%include "ThostFtdcUserApiStruct.h"
%include "ThostFtdcTraderApi.h"

3、MdUserapi_linux64Tradeapi_linux64  分別創建 src、test、wrap三個文件夾,同時在test文件夾下創建文件夾thostmduserapithosttradeapi,最終結果如下圖所示(交易接口目錄圖省略):



4、下載並解壓swigwin,可以看到swig.exe.進入Dos命令,cd到當前目錄MdUserapi_linux64下,執行一下命令:

D:\Swig\swigwin-2.0.11\swig.exe -c++ -java -package test.thostmduserapi -outdir src -o thostmduserapi_wrap.cpp thostmduserapi.i
運行上面命令,稍等片刻,兩點發生了變化:

1)、src文件夾下生成若干個.java文件


2)、MdUserapi_linux64目錄下多了兩個文件:thostmduserapi_wrap.h、thostmduserapi_wrap.cpp


5、cd到src目錄下,執行如下命令:

javac *.java

此時在src目錄下出現等量的class文件:


6、copy文件夾src下所有的class文件到test\thostmduserapi文件夾下,然後cd到Linux64_CTP_API\MdUserapi_linux64目錄下,執行如下命令:

jar cf thostmduserapi.jar test
此時在Linux64_CTP_API\MdUserapi_linux64目錄下出現thostmduserapi.jar文件:


7、上面4~6都是行情接口jar文件的配置,下面只貼出交易接口jar文件生成時的命令,具體詳細步驟同行情接口的配置,命令行命令如下:

D:\Swig\swigwin-2.0.11\swig.exe -c++ -java -package test.thosttraderapi -outdir src -o thosttraderapi_wrap.cpp thosttraderapi.i
javac *.java
jar cf thosttradeapi.jar test
Dos窗口的記錄如下圖:


結果如下圖:


三、步驟3:在Linux系統上面編譯生成動態庫so文件

Linux上面的so文件等同於windows上面dll文件,配置大致需要兩步。

(一)、Linux上面下載安裝libiconv庫文件。

CTP結算單信息是GB2313編碼,java則用UTF-8,所以需要字符編碼庫文件進行轉換,負責結算單會出現中文亂碼。

1、解壓libiconv-1.15.tar.gz  注意:/opt(這是我自己的目錄)

root@ubuntu:/home/oldtogether/Desktop# tar zxvf libiconv-1.15.tar.gz -C /opt

2、cd到libiconv-1.15

3、執行命令:

 ./configure --prefix=/usr/local
4、依次執行命令:

make
make install
5、此時在usr/local/lib此目錄下可看到不同版本的libiconv.so文件

(二)、編寫預編譯文件生成so文件

1、將windows上面的Linux_ctp_API文件(包含MdUserapi_linux64和Tradeapi_linux64)全部copy到Linux的/opt下:

將一下7個文件copy到wrap中,在thostmduserapi.so前面加lib,並創建makefile文件(總共八個文件):


行情接口預編譯文件makefile內容:

OBJS=thostmduserapi_wrap.o
INCLUDE=-I./ -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux
TARGET=libthostmduserapi_wrap.so
CPPFLAG=-shared -fPIC
CC=g++
LDLIB=-L. -lthostmduserapi
$(TARGET) : $(OBJS)
	$(CC) $(CPPFLAG) $(INCLUDE) -o $(TARGET) $(OBJS) $(LDLIB) ./libiconv.so.2.6.0
$(OBJS) : %.o : %.cpp
	$(CC) -c -fPIC $(INCLUDE) $< -o $@
clean:
	-rm -f $(OBJS)
	-rm -f $(TARGET)
install:
	cp $(TARGET) /usr/local/lib
上面是行情接口相關文件,下面是交易接口wrap文件以及makefile文件的內容:


OBJS=thosttraderapi_wrap.o
INCLUDE=-I./ -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux
TARGET=libthosttraderapi_wrap.so
CPPFLAG=-shared -fPIC
CC=g++
LDLIB=-L. -lthosttraderapi
$(TARGET) : $(OBJS)
	$(CC) $(CPPFLAG) $(INCLUDE) -o $(TARGET) $(OBJS) $(LDLIB) ./libiconv.so.2.6.0
$(OBJS) : %.o : %.cpp
	$(CC) -c -fPIC $(INCLUDE) $< -o $@ 
clean:
	-rm -f $(OBJS)
	-rm -f $(TARGET)
install:
	cp $(TARGET) /usr/local/lib
2、分別執行make命令:


此時會生成thostmduserapi_wrap.o和thostmduserapi_wrap.so,但是編譯時出現warning,將新生成的兩文件文件再次刪除,重新make,行情接口生成結果最終如下:


同理交易接口make成功最終結果如下:


註釋後:


3、將libthostmduserapi.so、libthostmduserapi_wrap.so(行情接口)和libthosttradeapi.so、libthosttraderapi_wrap.so(交易接口)copy到/usr/lib目錄下。

至此,動態庫文件生成完畢。

四、測試和驗證

在windows的Eclipses上面創建Java項目MdUserDemo,快速打成jar包,運行結果如下:


代碼正常運行,證明此次配置是成功的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章