我尝试为依赖于 libcudart.so.6.0 的程序创建 Debian 软件包。 debuild 脚本中止并显示:
dpkg-shlibdeps: Fehler: Bibliothek libcudart.so.6.0 konnte nicht gefunden werden, benötigt von debian/myprog-cuda/usr/bin/myprog-cuda (ELF-Format: »elf64-x86-64«; RPATH: »«).
dpkg-shlibdeps: Fehler: Kann wegen des vorangegangenen Fehlers nicht fortfahren.
Hinweis: Bibliotheken werden nicht in anderen Binärpaketen, die keine Shlibs-oder Symboldatei haben, gesucht.
Um dpkg-shlibdeps dabei zu helfen, private Bibliotheken zu finden, könnte es notwendig sein, LD_LIBRARY_PATH zu setzen.
dh_shlibdeps: dpkg-shlibdeps -Tdebian/myprog-cuda.substvars debian/myprog-cuda/usr/bin/myprog-cuda returned exit code 2
make: *** [binary-predeb-IMPL/myprog-cuda] Fehler 2
dpkg-buildpackage: Fehler: Fehler-Exitstatus von fakeroot debian/rules binary war 2
debuild: fatal error at line 1350:
dpkg-buildpackage -rfakeroot -D -us -uc failed
我认为等效的英文消息是“无法找到 debian/myprog-cuda/usr/bin/myprog-cuda 所需的库 libcudart.so.6.0”。但是,该库的路径已在 LD_LIBRARY_PATH 中。
如果我手动启动 dpkg-shlibdeps 脚本,则会收到不同的错误消息:
$ dpkg-shlibdeps -Tdebian/myprog-cuda.substvars debian/myprog-cuda/usr/bin/myprog-cuda
dpkg-shlibdeps: Fehler: Keine Abhängigkeitsinformationen für /usr/local/cuda-6.0/targets/x86_64-linux/lib/libcudart.so.6.0 (verwendet von debian/myprog-cuda/usr/bin/myprog-cuda) gefunden.
这当然意味着“没有找到 /usr/local/cuda-6.0/targets/x86_64-linux/lib/libcudart.so.6.0 的依赖信息(由 debian/myprog-cuda/usr/bin/myprog-cuda 使用)”
我可以解决这个问题
$ echo 'libcudart 6.0 cuda-core-libs-6-0' >debian/shlibs.local
现在,当我自己启动时,“dpkg-shlibdeps”已成功完成。
然而,这不会影响“debuild”——它仍然会像之前一样失败。看来“debuild”运行“dpkg-shlibdeps”与我不同。知道如何追踪或解决问题吗?
答案1
当我尝试使用 git-buildpackage 为 ROS 框架构建包时,我在 cuda 7.5 上遇到了同样的问题。我将您的解决方案更新到7.5版本并获得以下内容:
echo 'libcudart 7.5 cuda-cudart-7-5' | sudo tee /var/lib/dpkg/info/cuda-cudart-7-5.shlibs
sudo chmod a+r /var/lib/dpkg/info/cuda-cudart-7-5.shlibs
echo '/usr/local/cuda/lib64' | sudo tee /etc/ld.so.conf.d/nvidia_settings.conf
为了使其工作,我必须在 /var/lib/dpkg/info 中创建与 cudat 库相对应的 .shlibs 文件,并将 cuda 库的路径添加到 /etc/ld.so.conf.d/ 中的 .conf 文件中。
答案2
看来我的本地 LD_LIBRARY_PATH 设置被 debuild 忽略了。我可以扩展全局路径:
echo 'libcudart 6.0 cuda-core-libs-6-0' | sudo tee /var/lib/dpkg/info/cuda-core-libs-6-0.shlibs
sudo chmod a+r /var/lib/dpkg/info/cuda-core-libs-6-0.shlibs
然后就可以了。
这看起来很老套。我仍然对更干净的解决方案感兴趣。