cuda-core-libs-6-0에서 libcudart.so.6.0에 의존하는 데비안 패키지를 만듭니다.

cuda-core-libs-6-0에서 libcudart.so.6.0에 의존하는 데비안 패키지를 만듭니다.

libcudart.so.6.0에 의존하는 프로그램용 데비안 패키지를 만들려고 합니다. 디빌드 스크립트는 다음과 같이 중단됩니다.

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

그렇다면 괜찮습니다.

이건 진부한 것 같아요. 나는 여전히 더 깨끗한 솔루션에 관심이 있습니다.

관련 정보