我有一个 autotools 项目(c++),我为其构建了软件包启动板 ppa
最近我尝试将一个 Python 包添加到该存档中。我在本地bzr dh-make
使用 和进行了测试pbuilder
。两者都运行良好。但在启动板上却没有效果。
其中一个构建日志是这里
您会发现问题出在自动生成的安装目标上。当它安装 Python 模块时,它会发出警告,然后重新链接模块。我做了一些快速研究,看起来完全没问题
这是添加 python 模块目标后Makefile.am
:启动板上的构建日志中的错误最终显示:
/usr/bin/ld: cannot find -lvalhalla
collect2: error: ld returned 1 exit status
libtool: error: error: relink 'valhalla.la' with the above command before installing it
Makefile:2265: recipe for target 'install-pyexecLTLIBRARIES' failed
make[3]: *** [install-pyexecLTLIBRARIES] Error 1
奇怪的是,并不是所有都失败了。也许这与并发有关。
我注意到它运行的命令是make -j4 install
,然后在重新链接时似乎说找不到-lvalhalla
项目创建的主库的名称。它似乎同时安装多个东西,也许这就是问题所在。也许我可以只覆盖文件dh_auto_install
中的目标debian/rules
?
看起来其他人可以证实我所看到的列表。
答案1
因此,事实证明问题确实与并行构建有关,尤其是在最后重新链接 Python 模块时,其他内容尚未安装。修复也确实不是修复,而更像是一种变通,这正是我提出的。
也就是说,我只是将此目标添加到我的debian/rules
文件中:
#because python module depends on main library and somehow dependency is not known we must limit parallelism
override_dh_auto_install:
dh_auto_install --max-parallel=1
该--max-parallel=1
位将限制它运行make -j1 install
,这将避免在重新链接 python 模块时 libtool 正在寻找尚不存在的库(如上面的链接所述)的竞争条件。