python - 如何将 C 库包装在 SWIG 中,它通常在 C 编译期间链接?

标签 python c shared-libraries wrapper swig

给定一个 C 库,如果我想使用它的功能,则必须在编译期间链接它。我想使用 SWIG 在 Python 中访问这些函数。我只能找到使用 SWIG 包装 C 代码(example.c)的示例和介绍,没有找到如何包装动态库(example.so)的方法。

最佳答案

要使 .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 部分注入(inject)一些额外的代码,在 SWIG 的共享对象之前调用 dlopen被加载。

关于python - 如何将 C 库包装在 SWIG 中,它通常在 C 编译期间链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31699412/

相关文章:

python - 无法通过 python 中的公司代理将正确的凭据传递到服务器,但可以在 R 中执行此操作

python - 替换 pandas 合并产生的缺失值

c++ - 我是否需要断开从 XGetXCBConnection 获得的 xcb_connection_t?

c 递归排序

c - 在 C 中,如何在共享库文件中使用主程序文件中的函数

c++ - 使用 FindLibrary.cmake 添加非标准库到 cmake

c++ - 如何检查给定进程在运行时加载了哪些共享库?

python - 使用 pure & pythonic 库将 Unicode/UTF-8 字符串转换为小写/大写

python - 在 elasticsearch 中更新索引时出现 RequestError

sockaddr_in 结构中 "localhost"的 C Linux 宏?