2011-05-11 68 views
1

我正在冒险进入使用pybindgen为Python创建C/C++绑定的领域。我已经按照“建设它(GCC指令)”为示例文件创建绑定下所列的步骤:应放置共享对象文件的位置?

http://packages.python.org/PyBindGen/tutorial.html#a-simple-example

运行make产生.so文件。如果我明白.so文件如何工作,我应该能够将共享对象中的类放入Python中。但是,我不确定在哪里放置文件以及如何让Python知道它在哪里。另外,原始的c/C++源文件是否需要附带.so文件?

到目前为止,我已经尝试将文件放在/ usr/local/lib中,并将该路径添加到.bash_profile的DYLD_LIBRARY_PATH中。当我尝试从Python中的interpeter中导入模块时,会抛出一个错误,指出无法找到该模块。

所以,我的问题是:生成的.so文件需要做些什么才能被Python程序使用?

回答

3

Python在其搜索python的相同目录中查找.so模块。所以你必须像普通的python模块那样安装它,默认情况下是python的sys.path/usr/share/python/site-lib或类似—它会依赖于分布),或者将目录添加到PYTHONPATH环境变量中。

这是蟒蛇加载模块使用dlopen,而不是动态链接器,所以LD_LIBRARY_PATH(注意,没有DY)不会帮助你。

+0

感谢您的输入。我已将.so文件放入/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages。这当然是在路径上,因为我在同一目录中使用其他库。但是,Python仍然在抛出一个错误,指出不存在这样的模块。也许这个.so文件有问题吗?至于关于LD_LIBRARY_PATH的差异,我在Mac上,我在这里阅读http://www.agavemountain.com/2008/03/ldlibrarypath-in-mac-os-x.html,在Mac上,env变量是称为DYLD。 – JeremyFromEarth 2011-05-11 07:34:30

0

与所有其他Python模块相同。它必须位于sys.path中的某个位置。