LD_LIBRARY_PATH에 설정된 디렉터리로 라이브러리를 찾을 수 없습니다.

LD_LIBRARY_PATH에 설정된 디렉터리로 라이브러리를 찾을 수 없습니다.

CUDA 설치를 확인하려고 하는데 몇 가지 문제가 발생했습니다. GPU 컴퓨팅 SDK와 함께 제공되는 모든 예제를 성공적으로 구축했습니다. 그런데 deviceQuery를 실행하려고 하면 libcudart.so.4를 찾을 수 없다는 오류가 발생합니다.

하지만:

echo $LD_LIBRARY_PATH

보고

/usr/local/cuda/lib64

해당 디렉토리 내부에는 파일이 있습니다.

libcudart.so.4

라이브러리를 찾을 수 없게 만드는 다른 종류의 오류는 무엇입니까?

Fran의 답변 편집 :

  1. 예, 변수를 내보내는 중입니다.
  2. 프로그램이 64비트인지는 확실하지 않지만 64비트 SDK 설치의 일부로 제공되었으므로 다음과 같다고 가정하고 싶습니다.
  3. ldd의 출력:

    #ldd deviceQuery
    linux-vdso.so.1 =>  (0x00007fff94ecc000)
    libcudart.so.4 => /usr/local/cuda/lib64/libcudart.so.4 (0x00007f2d4658a000)
    libcuda.so.1 => /usr/lib64/libcuda.so.1 (0x00007f2d45b1e000)
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000037f1200000)
    libm.so.6 => /lib64/libm.so.6 (0x00000037e5e00000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000037f0600000)
    libc.so.6 => /lib64/libc.so.6 (0x00000037e5600000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00000037e5a00000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00000037e5200000)
    librt.so.1 => /lib64/librt.so.1 (0x00000037e6200000)
    libz.so.1 => /lib64/libz.so.1 (0x00000037e6e00000)
    /lib64/ld-linux-x86-64.so.2 (0x00000037e4e00000)
    

일반 사용자로 실행할 수 있지만 그렇게 하면 사용자가 GPU에 액세스할 수 없기 때문에 실패하게 됩니다. sudo로 실행하면 파일 누락 오류가 발생합니다.

달리기:

sudo ldd deviceQuery

출력의 두 번째 줄에서 누락된 libcudart.so.4를 확인합니다.

답변1

  1. LD_LIBRARY_PATH프로그램을 실행 중인 쉘에서 내보냈습니까 ?

  2. 프로그램과 공유 라이브러리가 모두 64비트 바이너리입니까(또는 둘 다 32비트 바이너리입니까)?

  3. 의 출력은 무엇입니까 ? 런타임에 라이브러리를 찾을 수 없는 프로그램은 ldd program어디에 있습니까?program

답변2

소스에서 빌드하는 경우 --prefix= 또는 --libdir=을 통해 기존 라이브러리 경로를 사용하도록 빌드하는 옵션이 있습니다. 그렇지 않으면 다음을 수행할 수 있습니다.

  • /etc/profile의 LD_LIBRARY_PATH에 /usr/local/cuda/lib64를 추가합니다.
  • 수동으로 이동하고(예: /usr/local/로) /usr/local/cuda에 대한 심볼릭 링크를 /usr/local로 만듭니다.
  • LDPRELOAD를 사용하여 누락된 라이브러리를 수동으로 미리 로드

LD_LIBRARY_PATH에 대한 간단한 알림입니다. 더 많은 경로를 추가할수록 동적 링커가 이를 찾기 위해 더 많은 경로를 조사해야 한다는 점을 명심하세요.

관련 정보