给定一个 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/