在 linux 上,anaconda,python3.7 环境中,从源码安装时遇到了类似的问题,目前已解决,在此记录一下,希望能有所帮助。
问题原因猜测
CTP API 动态链接库 libthostmduserapi_se.so 和 libthosttraderapi_se.so 对另外两个动态链接库 libstdc++.so.6 和 libgcc_s.so.1 的依赖与在 anaconda 环境中安装 vnpy_ctp 时编译生成的 vnctpmd.cpython-37m-x86_64-linux-gnu.so 和 vnctptd.cpython-37m-x86_64-linux-gnu.so 对 libstdc++.so.6 和 libgcc_s.so.1 的依赖出现差别。
CTP API 的两个动态链接库依赖的是系统自带的 /usr/lib 目录下的 libstdc++.so.6 和 libgcc_s.so.1 ,而安装 vnpy_ctp 时编译生成的两个动态链接库依赖的却是你安装时所在的 anaconda 环境目录中的 lib 目录中的 libstdc++.so.6 和 libgcc_s.so.1 。
可以使用 ldd 命令查看那些动态链接库是否属于这种情况,那四个动态链接库都在 vnpy_ctp 安装目录中的 api 目录下。
如果确实属于这种情况,可尝试如下解决
conda remove -n 环境名 --all
conda create -n 环境名 python=3.7
cd anaconda或miniconda安装目录/envs/环境名/lib
rm -f libstdc++.so* libgcc_s.so*
经过第 4 步,在新环境中,无论在安装过程中编译链接什么,用到的都是系统自带的(/usr/lib/) libstdc++.so.6 和 libgccs.so.1,避免了出现对它俩依赖不一致的情况。
BTW,也许有另一种解法,就是直接修改 CTP API 动态链接库,让它们使用 anaconda 环境目录中 lib 目录下的依赖,但它们是闭源的,直接以二进制文件形式发布,不晓得要怎么改〒〒