docker python3.8 手动配置腾讯行情so和6.6.1,运行报错:缺少`GLIBCXX_3.4.29'
在我的理解中,如果要运行腾讯行情,只能采取手动安装的模式。
代码部分
所以为了在docker里运行一个基于腾讯行情的采集服务,现手动安装6.6.1的ctp-python文件(路径)至目录openctp/linux,在同目录里导入ctp项目中的qq行情thostmduserapi_se.so库文件([路径])。
代码中,调用方式如下:
from openctp.linux.thostmduserapi import CThostFtdcDepthMarketDataField, CThostFtdcMdSpi, CThostFtdcReqUserLoginField, CThostFtdcSpecificInstrumentField, CThostFtdcRspInfoField, CThostFtdcRspUserLoginField, CThostFtdcMdApi
运行报错:
File "/openctp/linux/thostmduserapi.py", line 46, in <module>
from . import _thostmduserapi
ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /openctp/linux/_thostmduserapi.so)
容器排查
基础镜像采用的是基于 Debian 10(buster) 版本的 python:3.8.16-slim-buster
查看系统中 GLIBCXX 的版本
root@26cb220c5c97:~# strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_DEBUG_MESSAGE_LENGTH
确实没有该文件。
尝试安装
apt-get update
apt-get install gcc-4.9
apt-get upgrade libstdc++6
apt-get dist-upgrade
然后并没有成功。请问有什么办法来修复这个问题呢?我看到有类似的 issue,但我认为 pip 安装并不能解决使用行情服务的问题,请指导下面应该怎么办呢?
试试这个
https://github.com/Jedore/openctp-ctp-channels
K大编译了qq行情6.6.1的linux替换so文件,J大看怎么更新到channels呢 thostmduserapi_se.zip
过两天吧 @congcong009
@Jedore ctp6.6.1(6.6.1_P1_20210406/linux64)+ K大编译的 so 文件
又得到了如下报错,查了下好像是编译中缺了什么库···
File "/root/openctp/dll/linux/thostmduserapi.py", line 46, in <module>
from . import _thostmduserapi
ImportError: /root/openctp/dll/linux/_thostmduserapi.so: undefined symbol: PyCMethod_New
另外,关于 GLIBCXX 的版本问题,这是内核 Debian10 的版本缺陷,选择基于 Debian 12 的 python:3.8.19-bookworm 镜像就可以解决问题了。
linux 6.6.1 qq行情.zip
将K大编译的so改名为libthostmduserapi_se.so,linux环境下运行成功,压缩包里为完整可运行的qq行情linux环境文件,为手动配置版本。
由于涉及到对 libthostmduserapi_se.so 的修改,而我是采取重命名的方式实现,并且qq行情并没有使用openctp-ctp中qq行情目录下的 thostmduserapi_se.so 文件,这可能与当前的项目配置有冲突(python版本lib+opectp版本的qq定制so),我也没有用该 so 去测试交易,所以整体上看似解决了qq行情的获取问题,但解决方案很别扭。还请 J 大验证下吧,我就不 pr 了
@congcong009 迟来的答复 :joy:
- 关于docker 问题,同环境 Debian 10(buster) 版本的 python:3.8.16-slim-buster 测试过,没有问题,可能是你的环境有问题,可以重建试试。(之前群里说过哈)
- 关于 qq/sina 版的 6.6.7 以上的Linux 版本, 已编译完成, 请参考 openctp-ctp-channels
- qq版 Linux 下 TradingDay ActionDay 解析问题也已重编。
感谢J大的修复,给力 ^.^