编译kungfu1.0时产生的问题和解决方案汇总(1)
编译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)相关推荐
- VSCODE编译头文件时函数没有定义的解决方案(VSCODE手动链接C文件方法)
VSCODE编译头文件时函数没有定义的解决方案(VSCODE手动链接C文件方法) 参考文章: (1)VSCODE编译头文件时函数没有定义的解决方案(VSCODE手动链接C文件方法) (2)https: ...
- Visual Studio 2017在编译OpenCV 4.2.0时出现编译器错误C2001:常量中有换行符
Visual Studio 2017在编译OpenCV 4.2.0时出现编译器错误C2001:常量中有换行符 问题描述: Visual Studio 2017在编译OpenCV 4.2.0时出现编译器 ...
- Dev C++可以编译但运行时提示Failed to execute且Error 0:操作成功完成。
Dev C++可以编译但运行时提示Failed to execute且Error 0:操作成功完成. 问题 代码 现象 解决办法 更换GCC 可能和杀毒用软件有关系 问题 今天来复习C语言,写了简单几 ...
- java运行时_java编译时与运行时概念与实例详解
Java编译时与运行时很重要的概念,但是一直没有明晰,这次专门博客写明白概念. 基础概念 编译时 编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能识别的代码.(当然只 ...
- 编译cegcc 0.59.1
两年前因为要移植一些linux功能库曾经用过cegcc0.51(自己下载代码重新编译的),之后就没有用过.这两天闲来无事想把pixman移植到wince就上到SF上发现已经更新到0.59.1了,一时兴 ...
- linux make编译卡死,为linux内核编译make文件时出现问题?
我刚刚开始使用Linux内核开发,并且遇到了编译make文件的问题.为linux内核编译make文件时出现问题? 这是hello世界的教程. 我的HELLO-1.C文件 * * hello−1.c − ...
- 要启用实时(jit)调试 该应用计算机,解决%_启用实时(JIT)调试+编译应用程序时还必须启用方法歩骤?谁有最终解决方案?...
有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾. ************** 异常文本 ************** System.InvalidOperationExce ...
- 编译opencv4.2时出现undefined reference to `jpeg_default_qtables‘错误的解决方案
操作系统:kylinV10 opencv版本:4.2.0 在编译opencv4.2.0的版本时,出现undefined reference to `jpeg_default_qtables'的错误提示 ...
- Windows系统使用minGW+msys 编译ffmpeg 0.5的全过程详述
一.环境配置 1.下载并安装 MinGW-5.1.4.exe (http://jaist.dl.sourceforge.net/sourcef - -5.1.4.exe),安装时选中 g++, min ...
最新文章
- gan 总结 数据增强_白话GAN及其解决小样本问题的探讨
- 从零开始学习「张氏相机标定法」
- ​CSRankings年度更新,清华北大包揽AI领域前两名​ | AI日报
- 莫名的_locals属性
- part-time job
- linux 下运行libnids,libnids出错
- STL之双向循环链表(List)的内部关系
- 懂数据分析,你将比同龄人晋升快多少?
- 知乎;如何帮助前端新人入门和提高?
- 再谈WinRT自定义组件的开发
- java实现5 4 3 2 1递归_递归及递归的使用
- jsp实现简易购物车
- 两个转子的转轮机原理详解与算法实现
- 昨天偷懒了(⊙o⊙),好气啊,那今天就补上昨天的吧,orz向大佬们低头。还是熟悉的味道。
- C++关于引用的分析
- C4D R25 UV的展开与导出
- OCiOS开发:使用相册、照相机和录像
- nodejs 运行在tomcat_nodejs和tomcat的区别是什么?
- 关于我和计算机的故事
- Java毕业设计_消防安全培训系统
热门文章
- 3.有关802.11a/g物理头:LTF部分
- 图论 Warshall 和Floyd 矩阵传递闭包
- 关于xmind破解的方法
- ISO-8601 如何解读
- cousera of pku:魔兽世界:行军
- 中秋节古典flash动画素材
- 短小精悍的视频拍摄利器-Winavi Video Capture 绿色版_我是亲民_新浪博客
- 虚拟现实数字城市设计和管理解决方案
- java第一人称射击_[转] Unity实践 --- 第一人称射击游戏_
- 在MTU为1500,不分片的条件下,ping包长最大为1472B的理解