(이 질문을 최대한 일반화하고 싶습니다.) 제목에 문제가있는 라이브러리를 가져 왔습니다.프로그램 오류 : ./program : 공유 라이브러리를로드하는 동안 오류 발생 : <xxx> .so : 공유 개체 파일을 열 수 없음 : 해당 파일 또는 디렉터리가 없습니다.
나는 프로젝트가 있는데, 그 프로젝트를 위해서 xxx 라이브러리가 필요합니다. 그래서 라이브러리를 다운로드하고 기본 명령 (./configure && make && make install && make clean
)으로 컴파일합니다 - 설치 절차가 문서화되어 - 문서에 제공된 예제가 모든 것이 올바르게 설정되었는지 확인하기 위해 노력한 경우 시도했습니다. 내가 복사하고 .c 파일에 코드를 붙여 넣은 다음 명령으로 컴파일 :
gcc -o program program.c -lxxx
그리고 GCC 보고서 오류없이합니다. 내가 프로그램을 실행하지만, 즉시, 다음과 같은 오류가 발생합니다
./program: error while loading shared libraries: lib<xxx>.so: cannot open shared object file: No such file or directory
내 마음 -static GCC의 옵션을 사용하는 것이었다에 와서 첫 번째 솔루션입니다. 그것은 잘 작동하고 프로그램이 제대로 실행됩니다. 그러나 그것은 도서관이 프로그램에 "임베디드"되어 있음을 의미하기 때문에 실망했습니다 (잘못된 용어로 유감스럽게 생각합니다 : 나는 단지 학생입니다).
그래서 나는 스택 오버플로의 솔루션을 보았다 : 그게 내가 무엇을 발견 : error while loading shared libraries: libnsd.so: cannot open shared object file: No such file or directory
도서관이 다른하지만
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
가 잘 작동 명령을 사용하여. 실제로 libxxx.so는/usr/local/lib에있다 (단지 ls /usr/local/lib | grep xxx
을 사용). 스레드가 제안 다른, 영구적 인 해결책은 /etc/ld.so.conf를 파일에 디렉토리 이름을 작성하는 것입니다 :
sudo echo "/usr/local/lib" >> /etc/ld.so.conf
sudo ldconfig
그리고 그 까다로운 점이다 : ld.so.conf 파일에 다음 줄이 포함되어 그
/usr/local/lib
내가 포함 약이 조금 혼란 스러워요 라인을 포함 libc.conf
include /etc/ld.so.conf.d/*.conf
및 디렉토리 내부
는 /etc/ld.so.conf.d라는 파일이있다; C에서 #include와 똑같이 작동한다면 /etc/ld.so.conf 파일에/usr/local/lib가 있어야합니다. 그렇지 않은 것처럼 보입니다.
라이브러리를 설치 한 후'rehash'를 실행 했습니까? –
이 문제는 특히 C와 관련이 없습니다. – alk
[man ldconfig] (https://linux.die.net/man/8/ldconfig) –