首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何纠正带有Python支持的quickfix (v1.13.3)的编译/构建问题(... "_quickfix“导入异常)

如何纠正带有Python支持的quickfix (v1.13.3)的编译/构建问题(... "_quickfix“导入异常)
EN

Stack Overflow用户
提问于 2013-04-13 01:52:05
回答 3查看 2.1K关注 0票数 3

我花了相当于一天半的时间来解决这个问题,所以我想分享我遇到的Quickfix引擎编译问题和解决方案。

我没有从这里指向的“快速修复引擎”帮助资源中得到回复:"http://quickfixengine.org/help"...因此,我提供这个的另一个原因。

环境: Fedora 18和CentOS6 (64位)。

在成功编译了带有Python支持的quickfix之后(即,configure opts;make;make install),我得到了以下python导入异常,表明找不到python模块"_quickfix“:

代码语言:javascript
复制
==============================================
user$ python -c "import quickfix"

Traceback (most recent call last):
File " ", line 1, in
File "/home/user/APPS.d/ENTHOUGHT-PYTHON-IDE.d/x86_64.d/latest/lib/python2.7/site-packages/quickfix.py", line 7, in

import _quickfix
ImportError: No module named _quickfix
==============================================

该问题似乎存在于"make install“调用的安装脚本中。

python解释器说"_quickfix“模块不存在。从下面的"make install“安装的文件列表中可以看出,没有"_quickfix.py”文件,但有一个"_quickfix.so“文件和一个"_quickfix.dylib”文件的引用:

代码语言:javascript
复制
/home/user/.local/lib/python2.7/site-packages/_quickfix.dylib -> /home/user/APPS.d/QUICKFIX.d/latest/lib/python/_quickfix.dylib
/home/user/.local/lib/python2.7/site-packages/_quickfix.so -> /home/user/APPS.d/QUICKFIX.d/latest/lib/python/_quickfix.so
/home/user/.local/lib/python2.7/site-packages/quickfix40.py
/home/user/.local/lib/python2.7/site-packages/quickfix41.py
/home/user/.local/lib/python2.7/site-packages/quickfix42.py
/home/user/.local/lib/python2.7/site-packages/quickfix42.pyc
/home/user/.local/lib/python2.7/site-packages/quickfix43.py
/home/user/.local/lib/python2.7/site-packages/quickfix44.py
/home/user/.local/lib/python2.7/site-packages/quickfix50.py
/home/user/.local/lib/python2.7/site-packages/quickfix50sp1.py
/home/user/.local/lib/python2.7/site-packages/quickfix50sp2.py
/home/user/.local/lib/python2.7/site-packages/quickfix.py
/home/user/.local/lib/python2.7/site-packages/quickfix.pyc
/home/user/.local/lib/python2.7/site-packages/quickfixt11.py

/home/user/APPS.d/QUICKFIX.d/latest/lib/libquickfix.la
/home/user/APPS.d/QUICKFIX.d/latest/lib/libquickfix_python.la
/home/user/APPS.d/QUICKFIX.d/latest/lib/libquickfix_python.so.10.0.0
/home/user/APPS.d/QUICKFIX.d/latest/lib/libquickfix_python.so.10 -> libquickfix_python.so.10.0.0
/home/user/APPS.d/QUICKFIX.d/latest/lib/libquickfix_python.so -> libquickfix_python.so.10.0.0
/home/user/APPS.d/QUICKFIX.d/latest/lib/libquickfix.so.14.0.0
/home/user/APPS.d/QUICKFIX.d/latest/lib/libquickfix.so.14 -> libquickfix.so.14.0.0
/home/user/APPS.d/QUICKFIX.d/latest/lib/libquickfix.so -> libquickfix.so.14.0.0
/home/user/APPS.d/QUICKFIX.d/latest/lib/pkgconfig/quickfix.pc
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-13 09:21:22

解决方案:问题是上面的前两个条目是符号链接,它们被破坏了。

首先,目标目录不正确:

代码语言:javascript
复制
/home/user/APPS.d/QUICKFIX.d/latest/lib/python/...

实际上应该是:

代码语言:javascript
复制
/home/user/APPS.d/QUICKFIX.d/latest/lib/...

所以我们首先解决这个问题:

代码语言:javascript
复制
user$ cd /home/user/.local/lib/python2.7/site-packages
user$ rm _quickfix.so _quickfix.dylib
user$ ln -s /home/user/APPS.d/QUICKFIX.d/latest/lib/_quickfix.so    _quickfix.so
user$ ln -s /home/user/APPS.d/QUICKFIX.d/latest/lib/_quickfix.dylib _quickfix.dylib

接下来,更正目标目录位置后,符号链接仍然断开;这一次是因为它们在(刚刚更正的)目标目录中指向的文件名不存在(即"_quickfix.so“和"_quickfix.dylib”不存在)。

在尝试了一小段时间后,我通过创建那些丢失的文件来工作,如下所示:

代码语言:javascript
复制
user$ cd /home/user/APPS.d/QUICKFIX.d/latest/lib
user$ ln -s libquickfix_python.so _quickfix.so
user$ ln -s <???> _quickfix.dylib  # Actually I didn't create this one yet. It's not yet clear to me what it should point to. I Will update this post later.

-

代码语言:javascript
复制
Note: Because I compiled QuickFix so that it does not install to the traditional "/usr/local/" directory structure, I had to append my "LD_LIBRARY_PATH" to include: "/home/user/APPS.d/QUICKFIX.d/latest/lib"

通过最少的测试,事情现在似乎可以工作了(或者至少在正确的方向上):

代码语言:javascript
复制
user$ python -c "import quickfix"; echo ${?}
0
user$ python -c "import quickfix42"; echo ${?}
0

当我弄清楚第二个链接应该是什么(如果它是必要的),或者如果我在我实现的更正中遇到任何运行时错误,我将更新/编辑这篇文章。

我希望这对某些人有帮助。

诺埃尔

票数 3
EN

Stack Overflow用户

发布于 2013-07-26 01:12:47

在Ubuntu 13.04中也有同样的问题。配置为支持python并使用默认目标(/usr/local/...)。编译成功后,通过以下步骤制定出类似的解决方案;

  1. 创建丢失的文件/符号链接;

cd /usr/local/lib

sudo ln -s libquickfix_python.so _quickfix.so

sudo ln _quickfix.dylib

  • Change/update -s _quickfix.so sudo指向新位置的现有符号链接:

cd /usr/lib/python2.7/dist-packages/

sudo lib -s /usr/local/ _quickfix.so /_Quickfix.so usr

sudo ln -s /usr/local/lib/_quickfix.so sudo新库路径

导出LD_LIBRARY_PATH=$LD_LIBRARY_PATH${LD_LIBRARY_PATH:+:}/usr/local/lib

票数 1
EN

Stack Overflow用户

发布于 2014-06-23 19:21:23

您不需要创建多个符号链接-您只需要删除错误的符号链接并为_quickfix.so创建一个新的符号链接,一切都会正常工作:

代码语言:javascript
复制
rm /usr/local/lib/python2.7/site-packages/_quickfix.dylib
rm /usr/local/lib/python2.7/site-packages/_quickfix.so
ln -s /usr/local/lib/libquickfix_python.dylib /usr/local/lib/python2.7/site-packages/_quickfix.so

这是在OS上。对于Linux,你需要使用以下(因为dylib扩展是特定于OS的)

代码语言:javascript
复制
ln -s /usr/local/lib/libquickfix_python.so /usr/local/lib/python2.7/site-packages/_quickfix.so
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15977813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档