linux查看lib文件符号,Linux上的MATLAB MEX文件在libpython.2.7.s中找不到符号

我一直在使用libpython2.7.so开发一个project将Python解释器作为MEX文件嵌入到MATLAB中,但是每当我试图导入作为扩展模块实现的Python模块时都会遇到一个问题。例如,尝试导入itertools会导致以下错误:>> py_import itertools

ImportError: /usr/lib64/python2.7/lib-dynload/itertoolsmodule.so: undefined symbol: PyTuple_Type

??? Error using ==> pymex_fns

Python exception inside py_import.

Error in ==> py_import at 24

py_obj = pymex_fns(py_function_t.IMPORT, name);

无论我是否在调用Py_Initialize()之前清除LD_LIBRARY_PATH,并且从MATLAB中调用ldd(在本例中为itertools.so)不会产生任何{}消息,都会发生这种行为。下面,我粘贴了使用LD_DEBUG=libs集运行MATLAB的结果,首先在MATLAB启动时使用LD_LIBRARY_PATH设置,然后在运行setenv('LD_LIBRARY_PATH', '')之后尝试导入。在

如何解决这个问题,并允许动态加载扩展模块?在

使用MATLAB默认值LD_LIBRARY_PATH:

^{pr2}$

清除LD_LIBRARY_PATH后:>> py_import itertools

3125: find library=libpython2.7.so.1.0 [0]; searching

3125: search path=/usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64:/usr/local/MATLAB/R2011a/bin/glnxa64:/usr/local/MATLAB/R2011a/bin/glnxa64/../../sys/os/glnxa64 (RPATH from file /usr/local/MATLAB/R2011a/bin/glnxa64/MATLAB)

3125: trying file=/usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libpython2.7.so.1.0

3125: trying file=/usr/local/MATLAB/R2011a/bin/glnxa64/libpython2.7.so.1.0

3125: trying file=/usr/local/MATLAB/R2011a/bin/glnxa64/../../sys/os/glnxa64/libpython2.7.so.1.0

3125: search path=/usr/local/MATLAB/R2011a/sys/os/glnxa64 (LD_LIBRARY_PATH)

3125: trying file=/usr/local/MATLAB/R2011a/sys/os/glnxa64/libpython2.7.so.1.0

3125: search path=/usr/local/MATLAB/R2011a/bin/glnxa64 (RPATH from file /usr/local/MATLAB/R2011a/bin/glnxa64/MATLAB)

3125: trying file=/usr/local/MATLAB/R2011a/bin/glnxa64/libpython2.7.so.1.0

3125: search path=/usr/local/MATLAB/R2011a/extern/lib/glnxa64:/usr/local/MATLAB/R2011a/runtime/glnxa64:/usr/local/MATLAB/R2011a/sys/java/jre/glnxa64/jre/lib/amd64/native_threads:/usr/local/MATLAB/R2011a/sys/java/jre/glnxa64/jre/lib/amd64/server:/usr/local/MATLAB/R2011a/sys/java/jre/glnxa64/jre/lib/amd64 (LD_LIBRARY_PATH)

3125: trying file=/usr/local/MATLAB/R2011a/extern/lib/glnxa64/libpython2.7.so.1.0

3125: trying file=/usr/local/MATLAB/R2011a/runtime/glnxa64/libpython2.7.so.1.0

3125: trying file=/usr/local/MATLAB/R2011a/sys/java/jre/glnxa64/jre/lib/amd64/native_threads/libpython2.7.so.1.0

3125: trying file=/usr/local/MATLAB/R2011a/sys/java/jre/glnxa64/jre/lib/amd64/server/libpython2.7.so.1.0

3125: trying file=/usr/local/MATLAB/R2011a/sys/java/jre/glnxa64/jre/lib/amd64/libpython2.7.so.1.0

3125: search cache=/etc/ld.so.cache

3125: trying file=/lib64/libpython2.7.so.1.0

3125:

3125: find library=libutil.so.1 [0]; searching

3125: search path=/usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64:/usr/local/MATLAB/R2011a/bin/glnxa64:/usr/local/MATLAB/R2011a/bin/glnxa64/../../sys/os/glnxa64 (RPATH from file /usr/local/MATLAB/R2011a/bin/glnxa64/MATLAB)

3125: trying file=/usr/local/MATLAB/R2011a/bin/glnxa64/../../bin/glnxa64/libutil.so.1

3125: trying file=/usr/local/MATLAB/R2011a/bin/glnxa64/libutil.so.1

3125: trying file=/usr/local/MATLAB/R2011a/bin/glnxa64/../../sys/os/glnxa64/libutil.so.1

3125: search path=/usr/local/MATLAB/R2011a/sys/os/glnxa64 (LD_LIBRARY_PATH)

3125: trying file=/usr/local/MATLAB/R2011a/sys/os/glnxa64/libutil.so.1

3125: search path=/usr/local/MATLAB/R2011a/bin/glnxa64 (RPATH from file /usr/local/MATLAB/R2011a/bin/glnxa64/MATLAB)

3125: trying file=/usr/local/MATLAB/R2011a/bin/glnxa64/libutil.so.1

3125: search path=/usr/local/MATLAB/R2011a/extern/lib/glnxa64:/usr/local/MATLAB/R2011a/runtime/glnxa64:/usr/local/MATLAB/R2011a/sys/java/jre/glnxa64/jre/lib/amd64/native_threads:/usr/local/MATLAB/R2011a/sys/java/jre/glnxa64/jre/lib/amd64/server:/usr/local/MATLAB/R2011a/sys/java/jre/glnxa64/jre/lib/amd64 (LD_LIBRARY_PATH)

3125: trying file=/usr/local/MATLAB/R2011a/extern/lib/glnxa64/libutil.so.1

3125: trying file=/usr/local/MATLAB/R2011a/runtime/glnxa64/libutil.so.1

3125: trying file=/usr/local/MATLAB/R2011a/sys/java/jre/glnxa64/jre/lib/amd64/native_threads/libutil.so.1

3125: trying file=/usr/local/MATLAB/R2011a/sys/java/jre/glnxa64/jre/lib/amd64/server/libutil.so.1

3125: trying file=/usr/local/MATLAB/R2011a/sys/java/jre/glnxa64/jre/lib/amd64/libutil.so.1

3125: search cache=/etc/ld.so.cache

3125: trying file=/lib64/libutil.so.1

3125:

3125:

3125: calling init: /lib64/libutil.so.1

3125:

3125:

3125: calling init: /lib64/libpython2.7.so.1.0

3125:

3125:

3125: calling init: /home/cgranade/academics/software-projects/pymex-embed/src/pymex_fns.mexa64

3125:

3125: /home/cgranade/academics/software-projects/pymex-embed/src/pymex_fns.mexa64: error: symbol lookup error: undefined symbol: mexLibrary (fatal)

3125: /usr/lib64/python2.7/lib-dynload/itertoolsmodule.so: error: symbol lookup error: undefined symbol: PyTuple_Type (fatal)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值