ldconfig가 라이브러리 파일을 찾았지만 ldd가 이를 찾을 수 없습니다.

ldconfig가 라이브러리 파일을 찾았지만 ldd가 이를 찾을 수 없습니다.

OpenGL 가속 라이브러리(libGL 및 libGLU)를 구축하고 이를 특정 디렉토리에 저장했습니다 . 또한 OpenGL의 소프트웨어 /usr/lib/mali구현이 /usr/lib/arm-linux-gnueabihf./etc/ld.so.conf/usr/lib/mali

ldconfig모든 라이브러리 찾기:

$ sudo ldconfig -v
/usr/lib/mali:
libGLU.so.1 -> libGLU.so.1
libGL.so.1.2.0 -> libGL.so.1
/usr/lib/arm-linux-gnueabihf:
libGL.so.1 -> libGL.so.1.5.08005
libGLU.so.1 -> libGLU.so.1.3.08005

이상한 부분은 ldconfig심볼릭 링크가 생성되었지만 libGL.so.1.2.0libGLU대한 출력이 ldd더 이상하다는 것입니다.

ldd `which glxgears`
libGLU.so.1 => /usr/lib/mali/libGLU.so.1 (0xb6e4a000)
libGL.so.1 => /usr/lib/arm-linux-gnueabihf/libGL.so.1 (0xb6bb5000)
libGL.so.1.2.0 => /usr/lib/mali/libGL.so.1.2.0 (0xb67f1000)

출력은 소프트웨어 구현을 유지 libGLU하면서 파일이 하드웨어 가속 디렉터리에서 가져온 것임을 나타냅니다. 또한 어떤 이유로 로드되고 있습니다. 내가 결국 실행한 것은 소프트웨어 구현이었습니다 .libGLlibGL.so.1.2.0glxgears

무슨 일인지 설명해 줄 수 있는 사람 있나요? 소프트웨어 라이브러리 /usr/lib/arm-linux-gnueabihf/(실제로 패키지 종속성)를 제거하거나 덮어쓰지 않고 기본적으로 하드웨어 가속 라이브러리를 로드하려면 어떻게 해야 합니까 ?

PS : /usr/lib/mali/.LD_LIBRARY_PATH

답변1

문제는 실제로 내 Makefile 설정에 있습니다. 라이브러리를 검사한 결과 objdump근본 원인이 밝혀졌습니다.

$ objdump -p libGL.so.1 |grep SONAME
SONAME               libGL.so.1.2.0

ldd첫 번째 것은 내가 가져온 것이고 두 번째는 하드웨어 가속 버전에 대해 구축되었으므로 해당 soname 을 알고 있기 때문에 표시 libGL.so.1됩니다 .libGL.so.1.2.0glxgearslibGLUlibGLlibGL.so.1.2.0

해결 방법은 soname을 -soname,libGL.so.1.

관련 정보