编译kungfu-1.0时产生的问题和解决方案汇总

  • 1. 在执行make命令时,python库找不到。
  • 2. 在使用docker环境下运行的kungfu1.0的时候,ctp连接不上的问题。

为什么要用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投资者账户需要使用客户端登录并修改密码以后方可使用。

密码我也按照上述说明在客户端做了修改。

然后,我满怀期待开始运行…

[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


如何更换ctp接口文件呢?
其实这个没有任何的难度,网上应该很容易就找到了。然后需要更改so文件的名字,并且保持目录结构和原理来的是一致的。

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

编译kungfu1.0时产生的问题和解决方案汇总(1)相关推荐

  1. VSCODE编译头文件时函数没有定义的解决方案(VSCODE手动链接C文件方法)

    VSCODE编译头文件时函数没有定义的解决方案(VSCODE手动链接C文件方法) 参考文章: (1)VSCODE编译头文件时函数没有定义的解决方案(VSCODE手动链接C文件方法) (2)https: ...

  2. Visual Studio 2017在编译OpenCV 4.2.0时出现编译器错误C2001:常量中有换行符

    Visual Studio 2017在编译OpenCV 4.2.0时出现编译器错误C2001:常量中有换行符 问题描述: Visual Studio 2017在编译OpenCV 4.2.0时出现编译器 ...

  3. Dev C++可以编译但运行时提示Failed to execute且Error 0:操作成功完成。

    Dev C++可以编译但运行时提示Failed to execute且Error 0:操作成功完成. 问题 代码 现象 解决办法 更换GCC 可能和杀毒用软件有关系 问题 今天来复习C语言,写了简单几 ...

  4. java运行时_java编译时与运行时概念与实例详解

    Java编译时与运行时很重要的概念,但是一直没有明晰,这次专门博客写明白概念. 基础概念 编译时 编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能识别的代码.(当然只 ...

  5. 编译cegcc 0.59.1

    两年前因为要移植一些linux功能库曾经用过cegcc0.51(自己下载代码重新编译的),之后就没有用过.这两天闲来无事想把pixman移植到wince就上到SF上发现已经更新到0.59.1了,一时兴 ...

  6. linux make编译卡死,为linux内核编译make文件时出现问题?

    我刚刚开始使用Linux内核开发,并且遇到了编译make文件的问题.为linux内核编译make文件时出现问题? 这是hello世界的教程. 我的HELLO-1.C文件 * * hello−1.c − ...

  7. 要启用实时(jit)调试 该应用计算机,解决%_启用实时(JIT)调试+编译应用程序时还必须启用方法歩骤?谁有最终解决方案?...

    有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾. ************** 异常文本 ************** System.InvalidOperationExce ...

  8. 编译opencv4.2时出现undefined reference to `jpeg_default_qtables‘错误的解决方案

    操作系统:kylinV10 opencv版本:4.2.0 在编译opencv4.2.0的版本时,出现undefined reference to `jpeg_default_qtables'的错误提示 ...

  9. Windows系统使用minGW+msys 编译ffmpeg 0.5的全过程详述

    一.环境配置 1.下载并安装 MinGW-5.1.4.exe (http://jaist.dl.sourceforge.net/sourcef - -5.1.4.exe),安装时选中 g++, min ...

最新文章

  1. gan 总结 数据增强_白话GAN及其解决小样本问题的探讨
  2. 从零开始学习「张氏相机标定法」
  3. ​CSRankings年度更新,清华北大包揽AI领域前两名​ | AI日报
  4. 莫名的_locals属性
  5. part-time job
  6. linux 下运行libnids,libnids出错
  7. STL之双向循环链表(List)的内部关系
  8. 懂数据分析,你将比同龄人晋升快多少?
  9. 知乎;如何帮助前端新人入门和提高?
  10. 再谈WinRT自定义组件的开发
  11. java实现5 4 3 2 1递归_递归及递归的使用
  12. jsp实现简易购物车
  13. 两个转子的转轮机原理详解与算法实现
  14. 昨天偷懒了(⊙o⊙),好气啊,那今天就补上昨天的吧,orz向大佬们低头。还是熟悉的味道。
  15. C++关于引用的分析
  16. C4D R25 UV的展开与导出
  17. OCiOS开发:使用相册、照相机和录像
  18. nodejs 运行在tomcat_nodejs和tomcat的区别是什么?
  19. 关于我和计算机的故事
  20. Java毕业设计_消防安全培训系统

热门文章

  1. 3.有关802.11a/g物理头:LTF部分
  2. 图论 Warshall 和Floyd 矩阵传递闭包
  3. 关于xmind破解的方法
  4. ISO-8601 如何解读
  5. cousera of pku:魔兽世界:行军
  6. 中秋节古典flash动画素材
  7. 短小精悍的视频拍摄利器-Winavi Video Capture 绿色版_我是亲民_新浪博客
  8. 虚拟现实数字城市设计和管理解决方案
  9. java第一人称射击_[转] Unity实践 --- 第一人称射击游戏_
  10. 在MTU为1500,不分片的条件下,ping包长最大为1472B的理解