cuda-core-libs-6-0でlibcudart.so.6.0に依存するDebianパッケージを作成します。

cuda-core-libs-6-0でlibcudart.so.6.0に依存するDebianパッケージを作成します。

libcudart.so.6.0に依存するプログラム用のDebianパッケージを作成しようとしています。デビルドスクリプトは次のように中断されます。

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」が「dpkg-shlibdeps」を別々に実行しているようです。問題を追跡または解決する方法をご存知ですか?

答え1

ROSフレームワーク用のパッケージを構築するためにgit-buildpackageを使用しようとしたとき、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ファイルを作成し、.confファイルにcudaライブラリパスを追加する必要がありました。

答え2

私のローカルLD_LIBRARY_PATH設定はデビルドによって無視されるようです。グローバルパスを拡張できます。

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

だとしたら大丈夫です。

これは陳腐だと思います。私はまだよりクリーンなソリューションに興味があります。

関連情報