我在macosx10.10.2上使用Python3。我对PythonC-API还不熟悉,所以我正在尝试“PythonCookbook”http://chimera.labs.oreilly.com/books/1230000000393/ch15.html中的一个简单的C-API扩展示例。我认为Python2号和Python3号之间有些区别。我跟踪了Python3的文档,但找不到为什么我的案子不起作用。在
直到用蒸馏工程(python3 setup.py build
或python3 setup.py build_ext --inplace
)来构建,给我sample.so
文件。
我编译了sample.c
,同时得到了sample.o
。在
但是,当我从python导入时,我收到一条如下所示的错误消息,我不明白发生了什么。下面显示了在ipython3中运行的错误消息。在
请帮助我解决这个问题的扩展模块。谢谢!在
In [1]: import sample
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-6-a769eab12f54> in <module>()
----> 1 import sample
ImportError: dlopen(/Users/suh/pyLNKS/python-api-example/sample/sample.so, 2): Symbol not found: _gcd
Referenced from: /Users/suh/pyLNKS/python-api-example/sample/sample.so
Expected in: flat namespace
in /Users/suh/pyLNKS/python-api-example/sample/sample.so
In [2]:
下面是文件pysample.c
、sample.c
、sample.h
、和{
pysample.c
^{pr2}$样品c
1 /* sample.c */
2 #include <math.h>
3
4 /* compute the greatest common divisor */
5 int gcd(int x, int y){
6 int g = y;
7 while (x > 0){
8 g = x;
9 x = y % x;
10 y = g;
11 }
12 return g;
13 }
样品.h
1 /* sample.h */
2 #include <math.h>
3
4 extern int gcd(int x, int y);
在设置.py在
1 # setup.py
2 from distutils.core import setup, Extension
3
4 module1 = Extension('sample', sources = ['pysample.c'])
5
6 setup(name='simple',
7 version = '1.0',
8 description = "this is a demo package",
9 ext_modules = [module1]
10 )
11
存在一个链接问题,源代码sample.c没有链接,因此gcd函数未定义。在
因此,代码设置.py需要更改为:
samplemodule结构中有一个打字错误。 模块名是“sample”,不是“samle”
相关问题 更多 >
编程相关推荐