OpenGL 프로그램을 컴파일하려고 하는데 결과는 다음과 같습니다.
공유 라이브러리 로드 오류: libGLEW.so.1.11: 공유 개체 파일을 열 수 없습니다. 해당 파일 또는 디렉터리가 없습니다.
엮다:
g++ -o triangle triangle.cpp LoadShaders.cpp -I/home/mks/myGL/oglpg/include/ -L/home/mks/myGL/oglpg/lib -L/usr/lib64 -lglut -lGL -lGLU -lGLEW
모든 라이브러리는 /home/mks/myGL/oglpg/lib에 있습니다:
libGLEW.so libGLEW.so.1.11.0
libGLEW.a libGLEW.so.1.11
(저는 파워 유저가 아니기 때문에 위 폴더에 glew를 설치했습니다)
만약 내가한다면:
ldd ./triangle | grep "GLEW"
libGLEW.so.1.11 => not found
- 갱신 - -
엮다:
g++ -o triangle triangle.cpp LoadShaders.cpp -I/home/mks/myGL/oglpg/include/ -L/home/mks/myGL/oglpg/lib -L/usr/lib64 -lglut -lGL -lGLU -lGLEW
ldd./삼각형:
linux-vdso.so.1 =>
libglut.so.3 => /usr/lib64/libglut.so.3
libGL.so.1 => /usr/lib64/nvidia/libGL.so.1
libGLU.so.1 => /usr/lib64/libGLU.so.1
libGLEW.so.1.11 => not found
libstdc++.so.6 => /usr/lib64/libstdc++.so.6
libm.so.6 => /lib64/libm.so.6
libgcc_s.so.1 => /lib64/libgcc_s.so.1
libc.so.6 => /lib64/libc.so.6
libXext.so.6 => /usr/lib64/libXext.so.6
libX11.so.6 => /usr/lib64/libX11.so.6
libXxf86vm.so.1 => /usr/lib64/libXxf86vm.so.1
libXi.so.6 => /usr/lib64/libXi.so.6
libnvidia-tls.so.340.29 => /usr/lib64/nvidia/tls/libnvidia-tls.so.340.29
libnvidia-glcore.so.340.29 => /usr/lib64/nvidia/libnvidia-glcore.so.340.29
libdl.so.2 => /lib64/libdl.so.2
/lib64/ld-linux-x86-64.so.2
libxcb.so.1 => /usr/lib64/libxcb.so.1
libXau.so.6 => /usr/lib64/libXau.so.6
ls -al /home/mks/myGL/oglpg/lib:
drwxr-xr-x. .
drwxr-xr-x. ..
-rw-r--r--. freeglut_static.lib
-rw-r--r--. freeglut_static_vs2010_d.lib
-rw-r--r--. freeglut_static_vs2010.lib
-rw-r--r--. gl3w.c
-rw-r--r--. glew_static_d.lib
-rw-r--r--. glew_static_vs2010_d.lib
-rw-r--r--. glew_static_vs2010.lib
-rw-r--r--. libfreeglut.a
-rw-r--r--. libglew32.a
-rw-r--r--. libGLEW.a
lrwxrwxrwx. libGLEW.so -> libGLEW.so.1.11.0
lrwxrwxrwx. libGLEW.so.1.11 -> libGLEW.so.1.11.0
-rw-r--r--. libGLEW.so.1.11.0
-rw-r--r--. LoadShaders.cpp
-rw-r--r--. targa.cpp
-rw-r--r--. vbm.cpp
-rw-r--r--. vermilion32_d.lib
-rw-r--r--. vermilion32.lib
-rw-r--r--. vermilion64_d.lib
-rw-r--r--. vermilion64.lib
에코 $경로:
/usr/local/cuda-6.0/bin:/home/mks/bin:/usr/local/cuda-6.0/bin:/usr/lib64/:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
답변1
동적 라이브러리를 찾을 수 있는 위치를 시스템에 지시해야 합니다. 시스템 전체 디렉터리는 /usr/lib
동적 라이브러리의 기본 검색 경로에 있지만 사용자 지정 디렉터리를 추가하려면 환경 변수에 나열하여 선언해야 합니다 LD_LIBRARY_PATH
. 이는 콜론으로 구분된 디렉토리 목록입니다 PATH
.
export LD_LIBRARY_PATH=/home/mks/myGL/oglpg/lib
~/.profile
환경 변수를 정의하는 위치 또는 어디에나 이 줄을 배치하십시오 . 셸에서 실행할 수도 있으며 해당 셸에서 시작된 모든 프로그램에 적용됩니다.
또는 라이브러리를 사용하여 프로그램을 빌드할 때 해당 위치를 시스템에 등록하십시오.
g++ -Wl,-rpath,/home/mks/myGL/oglpg/lib … -L /home/mks/myGL/oglpg/lib -lGLEW
이것프로그램 라이브러리 Howto의 공유 라이브러리에 대한 장추가 도움을 받을 수도 있습니다.
답변2
고쳐 쓰다
방금 슈퍼유저 댓글을 확인했습니다. 루트가 되지 않고도 link 명령을 시도할 수 있습니다. 폴더의 권한이 여전히 허용될 수도 있습니다. 이것이 실패하면 시스템 관리자에게 도움을 요청해야 합니다.
애플리케이션이 라이브러리를 찾을 때 심볼릭 링크가 존재하지 않습니다.
이것을 시도해 보십시오(루트인 경우):
ln -sf /home/mks/myGL/oglpg/lib/libGLEW.so.1.11.0 /usr/lib64/libGLEW.so.1.11
그런 다음 ldd ./triangle
다시 실행하고 출력에 심볼릭 링크가 있는지 확인하세요. 위치를 보지 않으면 다른 심볼릭 링크를 찾아서 거기에 링크를 만듭니다. 위치가 아닌 경우 심볼릭 링크 위치를 수정한 후 파일 시스템에 사용되지 않는 심볼릭 링크를 남겨두고 나중에 정리하는 것을 잊지 않도록 심볼릭 링크 위치를 /usr/lib64
수정하십시오 .unlink /usr/lib64/libGLEW.so.1.11
왜냐하면=> 링크 만들기
SF 익스프레스=> 심볼릭 링크, 필수