Libtool Python模块链接和安装

3
我正在一个使用autotools编写的C项目上工作,它生成一个静态库。同时,在同一项目的上下文中,我还提供了Python接口来访问C API。直到最近,我没有获得引入libtool以便能够以可移植的方式提供静态和动态库的权限。因此,我使用distutils生成Python共享模块,并将Python模块链接到项目的C静态库中。这是因为我不被允许引入libtool/共享库。现在我想引入libtool,但面临以下两个问题:
  1. 如果我继续使用distutils生成Python共享模块,由于distutils和autotools无法相互通信,我需要告诉distutils要链接哪个C库。到目前为止,我想不出任何方法来做到这一点,除了解析.la文件以获取libtool能够生成的库的名称和路径。libtool是否提供有关其在系统上生成的库类型的任何信息?
  2. 如果我将Python模块生产移至automake,则可以正常运行,直到安装过程。我不知道如何告诉libtool我想要我的Python模块放在除lib文件夹之外的其他地方,即“lib/python2.5/site-packages/myproject”。我尝试在Makefile中仅复制库,但由于库具有错误的rpath(构建而不是安装的rpath),因此无法正常工作。为什么我想要它在那里?因为我还有.py包装器。因此,是否有任何方法告诉libtool将我的模块安装到其他位置并正确设置rpath?
我想我只是在寻找一个优雅的解决方案,或者也许解决方案已经存在,而且很简单,但由于我经验不足,所以看不到它。有帮助吗?
P.S.如果我能使其正常工作,我更喜欢选项2,因为这样我就不必从autotools传递信息到distutils。
1个回答

3
你有没有阅读过http://www.gnu.org/software/hello/manual/automake/Python.html?我不确定你是否想使用pyexecdir作为安装模块的位置。如果是这样,请将AM_PATH_PYTHON添加到configure.ac中。
无论如何,在automake中,_PRIMARY之前的名称指定了要安装的内容的位置:lib_LTLIBRARIES将库安装在$(libdir)中,pyexec_LTLIBRARIES将安装在$(pyexecdir)中,bin_PROGRAMS将安装在$(bindir)中等等。

哦,太好了!这正是我需要的。我在我的configure.ac中有AM_PATH_PYTHON,但我不知道pyexecdir和pkgpyexecdir。现在使用pkgpyexec_LTLIBRARIES,将Python模块发送到'lib/python2.5/site-packages/myproject'并具有正确的rpath。谢谢! - Cricri
另外,感谢提醒安装目录的主要位置。这才是真正发挥作用的地方,我完全忘记了它。 - Cricri
有没有建议在我的own.py脚本中安装依赖项,比如导入pysam(这是一个第三方包)? - Kemin Zhou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接