【发布时间】:2024-01-23 08:21:01
【问题描述】:
给定一个 C 库,如果我想使用它的功能,必须在编译期间链接它。我想使用 SWIG 在 Python 中访问这些函数。我只能找到使用 SWIG 包装 C 代码(example.c)的示例和介绍,没有方法如何包装动态库(example.so)。
【问题讨论】:
标签: python c shared-libraries wrapper swig
给定一个 C 库,如果我想使用它的功能,必须在编译期间链接它。我想使用 SWIG 在 Python 中访问这些函数。我只能找到使用 SWIG 包装 C 代码(example.c)的示例和介绍,没有方法如何包装动态库(example.so)。
【问题讨论】:
标签: python c shared-libraries wrapper swig
要使 .so(或 .a)库案例工作,您需要做的就是在执行示例构建过程的编译步骤时适当地链接库。您仍然必须编译生成的 example_wrap.c,这是您可以链接事物的地方。
根据 SWIG 文档进行了修改:
$ swig -python example.i
$ gcc -O2 -fPIC -c example.c
$ gcc -O2 -fPIC -c example_wrap.c -I/usr/local/include/python2.5
$ gcc -shared example_wrap.o -o _example.so -lmylib.so
实际上,您也可以在编译时链接器步骤跳过此步骤,并在运行时使用dlopen,而不是将一些额外代码注入模块的 Python 部分,该部分在加载来自 SWIG 的共享对象之前调用 dlopen。
【讨论】: