VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 6
声望: 0

报错信息如下:
Traceback (most recent call last):
File "/home//vnpy-4.0.0/run.py", line 6, in <module>
from vnpy_ctp import CtpGateway
File "/home/
/local/lib/python3.10/site-packages/vnpy_ctp/init.py", line 26, in <module>
from .gateway import CtpGateway
File "/home//.local/lib/python3.10/site-packages/vnpy_ctp/gateway/init.py", line 1, in <module>
from .ctp_gateway import CtpGateway
File "/home/
/.local/lib/python3.10/site-packages/vnpy_ctp/gateway/ctp_gateway.py", line 31, in <module>
from ..api import (
File "/home/*.local/lib/python3.10/site-packages/vnpy_ctp/api/init.py", line 1, in <module>
from .vnctpmd import MdApi # noqa
ImportError: /tmp/pip-install-m6_diylr/vnpy-ctp_24063700eb97461b80390e4e62ea4fd4/vnpy_ctp/api/libthostmduserapi_se.so: cannot open shared object file: No such file or directory

已确认libthostmduserapi_se.so和libthosttraderapi_se.so都在python3.10/site-packages/vnpy_ctp/api/目录下
但同时观察到报错信息中的md5码和实际存在的.so 文件的md5码不一致,不清楚这是否是报错的rootcause。
当前源代码API文件中没有vnctpmd.py文件只有编译过的.so 文件,是否有任何途径可以得到vnctpmd.py的python原始文件,以及是否有任何技术可能性自己通过cython对vnctpmd.py进行编译以match上期技术随时发布的动态库更新。

望大佬们解惑,感激不尽

Member
avatar
加入于:
帖子: 5465
声望: 333

通过什么语句安装的呢

Member
avatar
加入于:
帖子: 4
声望: 0

我有类似的错误:
ImportError: /tmp/pip-install-audbj1tk/vnpy-ctp_39ae2965604745798da54ee912884bc3/vnpy_ctp/api/libthostmduserapi_se.so: cannot open shared object file: No such file or directory
安装通过pip,uninstall后重新安装了几次也没有效果

Member
avatar
加入于:
帖子: 5465
声望: 333

pip install vnpy_ctp报的错吗

Member
avatar
加入于:
帖子: 4
声望: 0

pip安装没有问题,是在调用import vnpy_ctp或者from vnpy_ctp import CtpGateway过程中报的错

Member
avatar
加入于:
帖子: 4
声望: 0

我再补充一下场景,wsl下的Ubuntu24.04,clone的vnpy4.0.0到本地,bash install.sh安装,安装过程没有问题
然后pip install vnpy_ctp,正常安装
在import vnpy_ctp的过程中报错

Member
avatar
加入于:
帖子: 5465
声望: 333

把vnpy_ctp卸掉之后用pip install -e . --no-build-isolation --config-settings=build-dir=.\vnpy_ctp\api试试呢

Member
avatar
加入于:
帖子: 4
声望: 0

可以了可以了,感谢帮助~
xiaohe wrote:

把vnpy_ctp卸掉之后用pip install -e . --no-build-isolation --config-settings=build-dir=.\vnpy_ctp\api试试呢

Member
avatar
加入于:
帖子: 12
声望: 0

我也遇到了同样的问题,我在克隆的vnpy目录下运行这个代码后会重新安装vnpy,之后pip重新安装vnpy_ctp后,问题依旧,请问如何解决?而且克隆的vnpy目录下没有vnpy_ctp文件夹

Member
avatar
加入于:
帖子: 5465
声望: 333

手动安装vnpy包就只安装了框架,接口模块需要自己按需安装的
安装vnpy_ctp可以试下pip install -e . --no-build-isolation --config-settings=build-dir=.\vnpy_ctp\api

Member
avatar
加入于:
帖子: 12
声望: 0

我按照下面的方法操作后,还是会报错,错误是ImportError: /home/zz/miniconda3/envs/vnpy/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /home/zz/pyworks/vnpy_ctp/.vnpy_ctpapi/vnctpmd.cpython-312-x86_64-linux-gnu.so),这个需要如何处理?上述路径下我是可以找到libstdc++.so.6文件的

xiaohe wrote:

手动安装vnpy包就只安装了框架,接口模块需要自己按需安装的
安装vnpy_ctp可以试下pip install -e . --no-build-isolation --config-settings=build-dir=.\vnpy_ctp\api

Super Moderator
avatar
加入于:
帖子: 85
声望: 8

根据你的错误信息,核心问题是运行时加载的 libstdc++.so.6 版本过低(缺少 GLIBCXX_3.4.30 符号),而你手动编译的 vnctpmd.cpython-312-x86_64-linux-gnu.so 依赖更高版本的 C++ 标准库。以下是分步解决方案:


1. 确认当前 libstdc++ 版本

运行以下命令检查系统中 libstdc++ 的版本:

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

如果输出中 没有 GLIBCXX_3.4.30,说明系统自带的 libstdc++ 版本过低。


2. 安装更高版本的 libstdc++

方法一:通过 GCC 升级(推荐)

  1. 添加 GCC 仓库:
    sudo add-apt-repository ppa:ubuntu-toolchain-r/test
    sudo apt update
    
  2. 安装 GCC 13(或其他支持 GLIBCXX_3.4.30 的版本):
    sudo apt install gcc-13 g++-13
    
  3. 更新默认 GCC 版本:
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 60 --slave /usr/bin/g++ g++ /usr/bin/g++-13
    

方法二:手动下载 libstdc++(不推荐)

GNU 官网 下载 GCC 源码编译安装,生成新的 libstdc++.so.6 文件。


3. 设置 LD_LIBRARY_PATH

将新版本 libstdc++.so.6 的路径添加到环境变量中:

export LD_LIBRARY_PATH=/path/to/new/libstdc++:$LD_LIBRARY_PATH

例如,如果新库位于 /usr/local/lib64/

export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH

验证是否生效:

ldd /home/zz/pyworks/vnpy_ctp/.vnpy_ctpapi/vnctpmd.cpython-312-x86_64-linux-gnu.so | grep libstdc++

应显示新版本的路径。


4. 重新编译 vnpy_ctp 模块

确保编译时使用新版本的 GCC 和 libstdc++:

cd /home/zz/pyworks/vnpy_ctp
# 清理旧编译结果
rm -rf .vnpy_ctpapi
# 指定 GCC 版本并重新编译
CC=gcc-13 CXX=g++-13 pip install -e . --no-build-isolation --config-settings=build-dir=./.vnpy_ctpapi

5. 验证修复结果

运行 Python 脚本加载模块:

import vnpy_ctp.api.vnctpmd as md

如果无报错,则问题已解决。


6. 其他注意事项

  • Conda 环境问题:如果你在 Conda 环境中运行,确保 Conda 的 libstdc++ 不冲突:
    conda install -c conda-forge libstdcxx-ng=13.1.0
    
  • 系统级库冲突:避免直接替换系统 /usr/lib/x86_64-linux-gnu/libstdc++.so.6,可能导致系统不稳定。

总结

步骤 操作 目的
1 检查当前 libstdc++ 版本 确认是否缺少所需符号
2 升级 GCC 或手动安装新库 提供包含 GLIBCXX_3.4.30libstdc++
3 设置 LD_LIBRARY_PATH 强制运行时加载新版本库
4 重新编译 vnpy_ctp 确保模块链接到新版本库
5 验证修复 确认问题已解决

如果仍有问题,请提供以下信息:

  1. strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX 的完整输出
  2. gcc --version 的结果
  3. ldd /home/zz/pyworks/vnpy_ctp/.vnpy_ctpapi/vnctpmd.cpython-312-x86_64-linux-gnu.so 的输出
© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】