我使用自动工具处理用C语言编写的项目,该项目产生一个静态库.在同一项目的上下文中,Am还提供了与C API的Python接口.直到最近我才获得在项目中引入libtool的权限,以便能够以可移植的方式提供静态和动态库.到目前为止,我将使用distutils生成Python共享模块,并将python模块链接到项目的C静态库.再次,这是因为不允许我将libtool /共享库引入到实例中.现在,我想放入libtool,现在面临以下两个有问题的方案:
>如果我继续使用distutils生成Python共享模块,由于distutils和autotools不会互相通信,我需要告诉distutils要链接到哪个C库.到目前为止,我想不出任何办法,但是解析.la文件以获得libtool库能够产生的名称和路径. libtool是否提供有关它可以在系统上生成哪种类型的库的任何信息?
>如果我将Python模块的生产移至自动制作,那很好,直到完成安装过程.我不知道如何告诉libtool我希望我的Python模块位于lib文件夹以外的其他位置,即’lib / python2.5 / site-packages / myproject’.我试过了
只需将库复制到Makefile中,但是由于库的rpath错误(构建路径而不是安装路径)而无法正常运行.我为什么要在那里?因为那里也有.py包装器.因此,有没有办法告诉libtool在其他地方安装我的模块并正确设置rpath?
我想我只是在寻找一种优雅的解决方案,或者也许该解决方案在那里而且很简单,但是由于我经验不足,所以我看不到它.有什么帮助吗?
附言如果我可以使用它,则最好使用选项2,因为那样我就不必将信息从自动工具传递给distutils.
解决方法:
你读过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),依此类推. .