3

我使用自动工具处理一个用 C 编写的项目,该项目生成一个静态库。我还在同一项目的上下文中为 C API 提供 Python 接口。直到最近我才获得在项目中引入 libtool 的许可,以便能够以可移植的方式提供静态和动态库。到目前为止,我会使用 distutils 生成 Python 共享模块,并将 python 模块链接到项目的 C 静态库。同样,那是因为我不被允许将 libtool/shared 库引入到 ecuation 中。现在我想把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 错误(构建的路径而不是安装的路径),因此无法正常工作。为什么我要它在那里?因为我也有 .py 包装器。那么,有没有办法告诉 libtool 将我的模块安装在其他地方并正确设置 rpath ?

我想我只是在寻找一个优雅的解决方案,或者解决方案就在那里而且很简单,但我看不到它,因为我没有足够的经验。有什么帮助吗?

PS 如果我能让它工作,我更喜欢选项 2,因为这样我就不必将信息从 autotools 传递到 distutils。

4

1 回答 1

3

你读过http://www.gnu.org/software/hello/manual/automake/Python.html吗?我不知道您是否想pyexecdir用作安装模块的位置。如果是这样,添加AM_PATH_PYTHONconfigure.ac.

无论如何,在 automake 中,之前的名称_PRIMARY指定了要安装的位置:lib_LTLIBRARIES将库安装在$(libdir)pyexec_LTLIBRARIES将安装到$(pyexecdir)bin_PROGRAMS将安装到$(bindir)等等。

于 2011-02-11T01:49:09.103 回答