Vel*_*les 14 c++ python linker swig g++
我有一个C++库(让我们叫它mylib),它编译成libmylib.so文件中/usr/local/lib,我有一个名为目录一堆头文件my lib中/usr/local/include.
现在我想做的事情(对于初学者)只是使用其中一个头文件(它包含我的库提供的类的信息)和SWIG生成mylib_wrap.cxx文件,然后编译它并将其链接到现有文件mylib.so.这样我就可以在Python中实现我的类了.
这是正确的方法/想法吗?编译和链接命令将如何(当然不完全正确)?我正在尝试生成Python绑定.
Fle*_*exo 31
我为你准备了一个完整的例子:
(mylib.h)
class Foo {
};
void bar(const Foo&);
Run Code Online (Sandbox Code Playgroud)
#include "mylib.h"
#include <iostream>
void bar(const Foo& f) {
std::cout << &f << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
g++ -fPIC -Wall -Wextra -shared mylib.cc -o libmylib.so
%module mylib
// Make mylib_wrap.cxx include this header:
%{
#include "mylib.h"
%}
// Make SWIG look into this header:
%include "mylib.h"
Run Code Online (Sandbox Code Playgroud)
swig -Wall -c++ -python mylib.i g++ -fPIC -Wall -Wextra -shared mylib_wrap.cxx -o _mylib.so -L. -lmylib -I/usr/include/python2.7/ -lpython2.7
请注意,我们将Python模块与库相关联.如果它不在当前目录中,则需要指定库路径.SWIG希望将Python模块的原生部分称为_module.so
LD_LIBRARY_PATH=. python Python 2.7.2+ (default, Nov 30 2011, 19:22:03) [GCC 4.6.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import mylib >>> i=mylib.Foo() >>> mylib.bar(i) 0x28cc100 >>> mylib.bar(i) 0x28cc100 >>> mylib.bar(mylib.Foo()) 0x28b3b10
在这里,我通过适当地设置LD_LIBRARY_PATH确保我们刚刚构建的共享对象在库路径上.
| 归档时间: |
|
| 查看次数: |
9468 次 |
| 最近记录: |