libOpenCL.so.1 라이브러리가 있지만 로드할 수 없습니다.

libOpenCL.so.1 라이브러리가 있지만 로드할 수 없습니다.

다음과 같은 간단한 OpenCL 애플리케이션을 설치 ocl-icd-opencl-dev하고 실행해 보았습니다 vadd.

$ ./vadd
./vadd: error while loading shared libraries: libOpenCL.so.1: cannot open shared object file: No such file or directory

나는 팔로우했다이것, 출력은 다음과 같습니다(흥미로운 부분만 유지했습니다).

$ strace -f -v -s150 ./vadd 2>&1 | fgrep libOpenCL.so.1
...
open("/usr/lib/x86_64-linux-gnu/libOpenCL.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
...

훌륭한...

$ ls -la /usr/lib/x86_64-linux-gnu/ | grep libOpenCL
lrwxrwxrwx   1 root root       18 Dec 18  2015 libOpenCL.so.1 -> libOpenCL.so.1.0.0

내가 여기서 무엇을 놓치고 있는 걸까요? 이것이 libOpenCL.so.1심볼릭 링크에 문제가 있습니까?

답변1

제 경우에는 패키지 몇 개를 깨뜨렸어요.

먼저 파일 패키지가 정상적인지 확인하세요.

ls -la /usr/lib/x86_64-linux-gnu/libOpenCL*

이렇게 빨간색 결과가 나타나면

lrwxrwxrwx   1 root root        18 abr  5  2017 libOpenCL.so -> libOpenCL.so.1.0.0

빨간색 텍스트는 기호 링크가 끊어지고 대상이 누락되었음을 나타냅니다. 그런 다음 다시 설치해야 합니다.

빨리 달려

sudo apt --reinstall install ocl-icd-libopencl1

그럼 다시 해봐

ls -la /usr/lib/x86_64-linux-gnu/libOpenCL*
lrwxrwxrwx 1 root root    18 abr  5  2017 /usr/lib/x86_64-linux-gnu/libOpenCL.so -> libOpenCL.so.1.0.0
lrwxrwxrwx 1 root root    18 abr  5  2017 /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 -> libOpenCL.so.1.0.0
-rw-r--r-- 1 root root 43072 abr  5  2017 /usr/lib/x86_64-linux-gnu/libOpenCL.so.1.0.0

예! 더 이상 빨간색 텍스트가 없습니다. 이제 파일 libOpenCL.so.1.0.0이 존재합니다.

답변2

문제는 libOpenCL.so.1심볼릭 링크가 아니라 심볼릭 링크라는 것입니다.부서진심볼릭 링크.

$ ls -la /usr/lib/x86_64-linux-gnu/ | grep libOpenCL
lrwxrwxrwx   1 root root       18 Dec 18  2015 libOpenCL.so.1 -> libOpenCL.so.1.0.0

위의 출력은 "실제" 파일에 대한 심볼릭 링크만 보여줍니다 libOpenCL.so.1.0.0. 단, 해당 파일은 동일한 디렉터리에 있어야 하는데 사용할 수 없습니다. 이것이 ENOENT파일을 읽으려고 할 때 strace 출력이 보고되는 이유입니다.

답변3

나는 문제를 해결했기 때문에 다른 사람이 같은 구덩이에 빠질 경우를 대비해 내가 한 일을 게시하고 있습니다.

첫째로, 나는했다여기에 깨진 기호 링크가 있습니다.

$ ls -la /usr/lib/x86_64-linux-gnu/ | grep libOpenCL
lrwxrwxrwx   1 root root       18 Dec 18  2015 libOpenCL.so.1 -> libOpenCL.so.1.0.0

다음을 통해 OpenCL을 설치했습니다.OpenCL 애플리케이션용 인텔 SDK, 내 설치가 약간 혼란 스러웠습니다.

약간의 조사 끝에 Intel SDK를 설치하면 OpenCL 공유 라이브러리가 설치된다는 사실을 발견했습니다(연도 및 버전 변경 고려)./opt/intel/system_studio_2019/opencl_compilers_and_libraries_18.1.0.013/linux/compiler/lib/intel64_lin/. 내 시스템(Linux Mint)의 경우 이것이 기본 위치입니다(설치 중에 변경할 수 있는 유일한 위치 /opt/intel/). 실제로는 다음과 같습니다.

$ ls -l /opt/intel/system_studio_2019/opencl_compilers_and_libraries_18.1.0.013/linux/compiler/lib/intel64_lin/ | grep libOpenCL
lrwxrwxrwx 1 root root        16 Aug 16 04:35 libOpenCL.so -> ./libOpenCL.so.1
lrwxrwxrwx 1 root root        18 Aug 16 04:35 libOpenCL.so.1 -> ./libOpenCL.so.2.0
-rwxr-xr-x 1 root root     48216 Sep 21  2018 libOpenCL.so.2.0

즉, 유일한 "실제" 파일은 libOpenCL.so.2.0일련의 심볼릭 링크입니다: libOpenCL.so -> libOpenCL.so.1 -> libOpenCL.so.2.0.

또한 내가 찾은 것에는 꽤 좋아 보이는 심볼릭 링크가 많이 있습니다. /etc/alternatives/(기본적으로 제가 이해한 바에 따르면 이 심볼릭 링크는 라이브러리 이름 끝에 있는 숫자를 구문 분석하고 실제 라이브러리가 변경될 경우 중개자 역할을 합니다. 제가 지적했듯이 이전에는 모든 시스템에서 동일했습니다):

$ ls -l /etc/alternatives/ | grep OpenCL
lrwxrwxrwx 1 root root 115 Aug 16 04:35 opencl-libOpenCL.so -> /opt/intel/system_studio_2019/opencl_compilers_and_libraries_18.1.0.013/linux/compiler/lib/intel64_lin/libOpenCL.so
lrwxrwxrwx 1 root root 117 Aug 16 04:35 opencl-libOpenCL.so.1 -> /opt/intel/system_studio_2019/opencl_compilers_and_libraries_18.1.0.013/linux/compiler/lib/intel64_lin/libOpenCL.so.1
lrwxrwxrwx 1 root root 119 Aug 16 04:35 opencl-libOpenCL.so.2.0 -> /opt/intel/system_studio_2019/opencl_compilers_and_libraries_18.1.0.013/linux/compiler/lib/intel64_lin/libOpenCL.so.2.0

그래서 제가 할 수 있는 가장 쉬운 일은 위의 깨진 심볼릭 링크를 완전히 삭제하고(단지 rm) 라이브러리 이름 끝에 있는 각 숫자에 하나씩 3개의 새로운 심볼릭 링크를 만드는 것이었습니다.

$ cd /usr/lib/x86_64-linux-gnu
$ sudo ln -s /etc/alternatives/opencl-libOpenCL.so libOpenCL.so
$ sudo ln -s /etc/alternatives/opencl-libOpenCL.so.1 libOpenCL.so.1
$ sudo ln -s /etc/alternatives/opencl-libOpenCL.so.2.0 libOpenCL.so.2.0

이제 /usr/lib/x86_64-linux-gnu디렉토리는 다음과 같으며 모든 것이 잘 작동하는 것 같습니다.

$ ls -l /usr/lib/x86_64-linux-gnu/ | grep OpenCL
lrwxrwxrwx  1 root root       37 Aug 16 04:47 libOpenCL.so -> /etc/alternatives/opencl-libOpenCL.so
lrwxrwxrwx  1 root root       39 Aug 16 04:47 libOpenCL.so.1 -> /etc/alternatives/opencl-libOpenCL.so.1
lrwxrwxrwx  1 root root       41 Aug 16 04:35 libOpenCL.so.2.0 -> /etc/alternatives/opencl-libOpenCL.so.2.0

답변4

libOpenCL.so.1을 가리키는 심볼릭 링크 libOpenCL.so를 만듭니다. 그게 다야.

$ cd /usr/lib/x86_64-linux-gnu/
$ ln -fs libOpenCL.so.1 libOpenCL.so

관련 정보