【发布时间】:2017-05-31 21:23:44
【问题描述】:
我在 Python 项目中使用过 C 代码,例如 this 教程。
我构建了一个扩展,以便可以通过 Python 调用 main.c 代码中的 A 函数。但是,函数 A 调用了存在于名为 code.c 的文件中的其他各种函数,而我在使用这些函数时遇到了问题。
如果把所有的功能都放在main.c中是没有问题的,但是出于组织的原因我想把这个项目模块化!
构建模块的setup.py如下。
ext = [
Extension(
'main',
sources = ['main.c'] ,
extra_compile_args=['-lpq'] ,
extra_link_args = ['-L/usr/local/pgsql/lib','-lpq'],
language=['c']
)
]
setup(name='project', version='1.0', ext_modules = ext)
我该如何修改它,以便code.c 函数可以在main.c 中使用而不会出现任何问题?
这里是情况的概要:
main.c
#include <Python.h>
#include "code.h"
//....
void send(char* name)
{
//DO SOMETHING
function_from_code(name)
}
code.c
.....
#include "code.h"
void function_from_code(char* name)
{
//DO SOMETHING
}
然后是 Python 代码:
import main
...
main.send("My Name")
那么这样,python代码就调用了modulemain C的函数(到目前为止一切顺利)。此时main.c从code.c调用一个函数,抛出如下错误:
ImportError: /usr/local/lib/python2.7/dist-packages/main.so: undefined symbol: function_from_code
显然,使用#include 是不够的。
【问题讨论】:
-
您正在寻找文档。在 python.org 上搜索。
-
您是直接调用这些函数还是
code.cc-functions 中的函数也可以从Python 调用?在第一种情况下,您可以只链接到“code.c”(包括或类似于库),在后一种情况下,只需“导入”“code.c”python 模块。如果您正在寻找好的答案,您能否提供一些文件示例以及您希望如何调用它们? -
@MSeifert 请参阅编辑。但简而言之,python 代码调用了
main.c中的函数。并且只有main.c调用了code.c中的函数。
标签: python c distutils python-c-extension