libtool Python模块链接与安装

3 投票
1 回答
2498 浏览
提问于 2025-04-16 11:35

我在一个用C语言写的项目上工作,这个项目使用了autotools,主要是生成一个静态库。同时,我还在这个项目中提供了一个Python接口,方便调用C语言的API。之前我没有权限引入libtool,所以只能生成静态库,不能同时提供静态和动态库。到目前为止,我是用distutils来生成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设置错误(是构建时的路径,而不是安装时的路径)。我为什么想把它放在那里?因为那里还有.py的包装文件。那么,有没有办法告诉libtool把我的模块安装到其他地方,并正确设置rpath呢?

我想我只是想找一个优雅的解决方案,或者说解决方案可能已经存在,而且很简单,但我因为经验不足而看不到。有没有人能帮帮我呢?

附注:如果我能让选项2工作的话,我更倾向于这个选项,因为这样我就不需要把信息从autotools传递到distutils了。

1 个回答

3

你有没有看过这个链接 http://www.gnu.org/software/hello/manual/automake/Python.html?我不太确定你是否想把 pyexecdir 作为安装模块的地方。如果是这样的话,你需要在 configure.ac 文件中添加 AM_PATH_PYTHON

总之,在 automake 中,_PRIMARY 前面的名字是用来指定安装位置的:lib_LTLIBRARIES 会把库安装到 $(libdir)pyexec_LTLIBRARIES 会安装到 $(pyexecdir)bin_PROGRAMS 会安装到 $(bindir),等等。

撰写回答