繁体   English   中英

C-> Python导入包装器问题

C ->Python Import Wrapper Problems

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我已经在我的C文件blargUtils.c中定义了包装对象的名称,如下所示(我在Blargmethods中定义了方法及其用途)...

void initBlarg(){
    Py_InitModule("Blarg", Blargmethods);
}

我这样编译它...

blarglib: blargUtils.c
    gcc -I/usr/include/python2.6 -fPIC -c blargUtils.c -Wall    
    gcc -shared blargUtils.o -o blargUtils.so
clean:  
    rm *.so

但是,当我尝试在我的python脚本中导入包装器时...

import Blarg

它说:“ ImportError:没有名为Blarg的模块”。 我在这里有点迷茫,我不明白为什么当它们完全相同的拼写时却找不到类。 也许是逻辑错误?

如果需要更多代码,请告诉我。

1 个回复

首先,从评论看,我发现重命名是行不通的。 这意味着(1)python找不到.so文件,(2).so文件不可用(即,编译不正确或未找到所有必需的符号),或(3)存在.py /相同名称的.pyc / .pyo文件。 如果您已经定义了Blarg.py,python将首先查看此文件。 如果在搜索路径中有一个名为Blarg的目录,情况也是如此。 因此,不要将头撞在墙上,请尝试以下操作:

1)重命名您的.so库以保证不会冲突(例如_Blarg)

void initBlarg() {
    Py_InitModule("_Blarg", Blargmethods);
}

2)用相同的名称编译

gcc -I/usr/include/python2.6 -fPIC -c blargUtils.c -Wall    
gcc -shared blargUtils.o -Wl,-soname -Wl,_Blarg.so -o _Blarg.so

3)创建一个python包装器(即Blarg.py)

import sys
sys.path.append('/path/to/your/library')

import _Blarg

def blargFunc1(*args):
    """Wrap blargFunc1"""
    return _Blarg.blargFunc1(*args)

4)现在只需正常使用

import Blarg
Blarg.blargFunc1(1, 2, 3)

显然,这有点矫kill过正,但是它应该可以帮助您确定问题出在哪里。 希望这可以帮助。

1 C->可以从自身引用struct吗?

我是一名Java程序员,并且是C风格结​​构的新手,我有一个结构,该结构包含一个包含开关盒的函数: 我想知道是否有办法可以使用“?” 传递给我的交换机的名称是AXIS.name。 例如,如果我有 我希望Y.myFunction()调用案例y 。 感谢您在此问题上的帮 ...

2014-11-13 09:10:22 2 173   c/ struct
2 C ++的SWIG包装问题-> python

我试图通过使用SWIG包装依赖于另一个C ++文件(global.cpp)的C ++文件。 我能够获得第一个正常运行的文件,但是这种嵌套的依赖关系似乎引起了问题。 这是我的设置: position.i position.cpp position.h 原型 然 ...

3 C-> malloc-> dlsym

我已经使用dlsym()调用了我的malloc版本,而不是默认的库malloc: 现在经过一定时间后,可能是一个计时器左右,我想恢复到malloc的原始版本(libc库malloc)。 我怎样才能做到这一点? 提前致谢。 ...

4 替换realloc(C - > C ++)

在之前的一个问题中,我询问了类型转换指针,但是针对使用C ++分配系统而不是mallocs的更好解决方案。 (我正在将一些C代码转换为C ++) 但是,我仍然遇到类似功能的问题: 我变了: 和 但是,我在以下函数中如何处理realloc: 我收到以下错误: ...

5 C->标头和变量

C中的头文件可以包含变量吗? 我是编程的初学者; 从C开始,我知道精度的重要性,尤其是在学习过程的第一步中 ...

9 在64位操作系统上构建C-> Python库

我有一个Swig包装的第三方库,以便可以用Python与之交谈。 这适用于32位OS / Python /第三方库。 最近,我从第三方那里收到了这些库的64位版本,因此我想重建这些库以利用这一点(当然,使用64位Python和64位OS)。 但是,尝试导入库时出现此错误: (内存处 ...

10 传递参数 C -> NASM -> C

诚然,这是一些家庭作业的帮助,但我似乎无法解决一个特定的问题。 我正在尝试编写一个程序,它接受一个十六进制字符的字符串,调用一个汇编函数,它给我十六进制字符串的十进制值。 该汇编函数调用 C 中的“检查器”函数,以确保每个字符都是合法的十六进制值。 我的问题是,如何在汇编程序中获取 EBX 寄存 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM