IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 编译kungfu1.0时产生的问题和解决方案汇总(1) -> 正文阅读

[系统运维]编译kungfu1.0时产生的问题和解决方案汇总(1)

为什么要用1.0呢?
这是最后一个使用python2.7开发的版本。
是以 Docker/rpm 方式运行的最后稳定版本。
俺的目的是二次开发。

1. 在执行make命令时,python库找不到。

lighthouse@VM-12-6-ubuntu:/home/liuchang/kungfu-1.0.0/build$ sudo make 
[  3%] Built target kflog
[  5%] Linking CXX shared library libjournal.so
/usr/bin/ld: cannot find -lpython
collect2: error: ld returned 1 exit status
yijinjing/journal/CMakeFiles/journal.dir/build.make:367: recipe for target 'yijinjing/journal/libjournal.so.1.1' failed
make[2]: *** [yijinjing/journal/libjournal.so.1.1] Error 1
CMakeFiles/Makefile2:185: recipe for target 'yijinjing/journal/CMakeFiles/journal.dir/all' failed
make[1]: *** [yijinjing/journal/CMakeFiles/journal.dir/all] Error 2
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2

使用make VERBOSE=1命令,可以看到更加详细的错误日志的输出。

[ 27%] Linking CXX shared library libjournal.so
cd /home/liuchang/kungfu-1.0.0/build/yijinjing/journal && /usr/bin/cmake -E cmake_link_script CMakeFiles/journal.dir/link.txt --verbose=1
/usr/local/gcc-11.1.0/bin/g++-11.1 -fPIC  -std=c++11 -O3 -Wall  -shared -Wl,-soname,libjournal.so.1.1 -o libjournal.so.1.1 CMakeFiles/journal.dir/Journal.cpp.o CMakeFiles/journal.dir/JournalHandler.cpp.o CMakeFiles/journal.dir/JournalReader.cpp.o CMakeFiles/journal.dir/JournalWriter.cpp.o CMakeFiles/journal.dir/Page.cpp.o CMakeFiles/journal.dir/PageUtil.cpp.o CMakeFiles/journal.dir/PythonExtend.cpp.o CMakeFiles/journal.dir/PageProvider.cpp.o CMakeFiles/journal.dir/StrategyUtil.cpp.o CMakeFiles/journal.dir/JournalFinder.cpp.o CMakeFiles/journal.dir/__/utils/Timer.cpp.o -lpython /opt/kungfu/toolchain/boost-1.62.0/lib/libboost_locale.so /opt/kungfu/toolchain/boost-1.62.0/lib/libboost_date_time.so /opt/kungfu/toolchain/boost-1.62.0/lib/libboost_filesystem.so /opt/kungfu/toolchain/boost-1.62.0/lib/libboost_system.so /opt/kungfu/toolchain/boost-1.62.0/lib/libboost_thread.so /opt/kungfu/toolchain/boost-1.62.0/lib/libboost_serialization.so /opt/kungfu/toolchain/boost-1.62.0/lib/libboost_math_tr1.so /opt/kungfu/toolchain/boost-1.62.0/lib/libboost_python27.so /opt/kungfu/toolchain/boost-1.62.0/lib/libboost_chrono.so /opt/kungfu/toolchain/boost-1.62.0/lib/libboost_regex.so /opt/kungfu/toolchain/boost-1.62.0/lib/libboost_program_options.so /opt/kungfu/toolchain/boost-1.62.0/lib/libboost_atomic.so -lpthread
/usr/bin/ld: cannot find -lpython
collect2: error: ld returned 1 exit status
yijinjing/journal/CMakeFiles/journal.dir/build.make:367: recipe for target 'yijinjing/journal/libjournal.so.1.1' failed
make[2]: *** [yijinjing/journal/libjournal.so.1.1] Error 1
make[2]: Leaving directory '/home/liuchang/kungfu-1.0.0/build'
CMakeFiles/Makefile2:185: recipe for target 'yijinjing/journal/CMakeFiles/journal.dir/all' failed
make[1]: *** [yijinjing/journal/CMakeFiles/journal.dir/all] Error 2
make[1]: Leaving directory '/home/liuchang/kungfu-1.0.0/build'
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2

当前环境:
gcc11 g++11
cmake version 3.10.2
boost1.69
rfoo 1.3.1
pid 2.1.1
log4cplus2 2.0.0_RC1
supervisor 3.1.0

对于这个问题,网上看了很多,仍然没有办法解决。

简单分析一下这个报错。 cannot find -lpython,这个-lpython其实是library python的意思,也就是python相关的so文件没有找到。这样看来,其实找一下cmake库里的动态链接的路径,看看有没有那个路径指向错误的地方。或者对照一下现有的可以运行的镜像里的so文件,然后拷贝一下。

按照这个思路,编译过程的问题是肯定可以被解决的。

我配置的环境目前配置在腾讯云的应用服务器上面。
我的腾讯云的云服务器里有一个之前可以跑通的镜像。
上级还给了一个安装环境的脚本sh文件。
在kungfu1.0的源码目录下面还有几个很好的文档。

我觉得可以对照这些很好的资源。把环境一点一点的配起来。
后面的文章针对这个大问题进行逐个的击破。
首先存在的一个问题就是boost_python的测试cpp通不过的问题。以及boost1.62的安装问题。

2. 在使用docker环境下运行的kungfu1.0的时候,ctp连接不上的问题。

咱们来看一下我的运行过程。

在已经安装好了kungfu的情况下,可以通过下面的命令快速的进行启动。
(在镜像名字为kungfu的情况下)

$ sudo systemctl start docker
$ sudo docker start kungfu
$ sudo docker exec -it kungfu bash
$ sudo systemctl start kungfu
$ sudo systemctl status kungfu

然后看一下配置的信息。这里我先配置了md_ctp的账户信息:

"md":
  {
    "ctp":
    {
      "FrontUri": "tcp://180.168.146.187:10211",
      "UserId": "XXXXXX",
      "BrokerId": "9999",
      "Password": "XXXX"
    },

在这个网站CTP开放平台运行环境监控上,我可以看到,我当前使用的这个ctp的行情URL是通的。

官方文档的说明:

账户的配置信息中 FrontUri 是前置地址,如果使用的是 simnow 仿真账户可以在 simnow 官网查询, UserId 和 InvestorId 均为投资者账户,BrokerId 为券商代码,simnow 账户 BrokerId 一般为 9999。simnow投资者账户需要使用客户端登录并修改密码以后方可使用。

密码我也按照上述说明在客户端做了修改。
CTP开放平台运行监控
然后,我满怀期待开始运行…

[root@VM-12-6-ubuntu kungfu]# kungfuctl
md_ctp                           FATAL     Exited too quickly (process log may have details)
md_xtp                           STOPPED   Not started
td_ctp                           STOPPED   Not started
td_xtp                           STOPPED   Not started
yijinjing                        RUNNING   pid 4804, uptime 3:25:32
kungfu> start md_ctp
md_ctp: ERROR (abnormal termination)

然后咱们去查一下日志:

22-04-22 13:10:18.712 INFO  MdEngine.CTP %% - IEngine::init Password->"XXX"
22-04-22 13:10:18.713 INFO  MdEngine.CTP %% - IEngine::init UserId->"XXXXXX"
22-04-22 13:10:18.720 INFO  MdEngine.CTP %% - [OnFrontConnected]
22-04-22 13:10:18.731 INFO  MdEngine.CTP %% - [OnFrontDisconnected] reason=4097
22-04-22 13:10:18.738 INFO  MdEngine.CTP %% - [OnFrontConnected]

reason=4097 代表什么呢?
我去搜索一下。

1)核对版本

目前CTP要求API版本和后台版本一致才能有正确的onfrontconnected回调。

版本不对会不停地回调OnFrontDisconnected,或者输出Decrypt handshake data
failed,或者没有任何反应。

所以先检查API版本是否正确,可以调用函数GetApiVersion输出当前API版本。

目前期货公司正式生产和simnow上均是v6.3.15_20190220版本,期货公司评测使用v6.3.13或者v6.3.16版本(小版本号不影响评测)。

来源:
https://zhuanlan.zhihu.com/p/92289091
那么功夫1.0的CTP的版本是多少呢?
我查看了kungfu源码目录下的config.in文件,里面写的是6.3.6版本(如下面所示),发现确实和simnow后台用的6.3.15存在版本的不一致。

在这种情况下,我觉得想要通过连通的话。就应该对源码中使用的CTP接口文件进行更新。

CTP_VERSION=v6.3.6_20160606
XTP_VERSION=XTP_API_20180227_1.1.16.20

那问题该如何解决呢?
上级命令:运行最新版本的CTP,然后尝试把这个它里面的CTP文件拷贝出来进行替换。

我发现了源码里面的ctp和xtp接口文件存在这个路径下面。
/kungfu-1.0.0/longfist/api
kungfu api文件的位置
CTP6.3.15
如何更换ctp接口文件呢?
其实这个没有任何的难度,网上应该很容易就找到了。然后需要更改so文件的名字,并且保持目录结构和原理来的是一致的。

经过测试验证,在把接口文件更换了之后,ctp可以成功启动起来了!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 19:19:35  更:2022-04-22 19:20:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:54:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码