embedded Linux .so 라이브러리 로드 에러 간단한 디버깅 해결 방법

Linux에서 so 라이브러리를 로드 하지 못하고 에러를 출력할 경우 다음과 같은 방법으로 해결할 수 있다

$ ./a.out
./a.out: error while loading shared libraries: xxx.so: cannot open shared object file: No such file or directory



1. xxx.so 파일 형식 확인

 file 명령어를 사용하여 so 파일과 실행 파일의 elf 형식, process 타입을 확인한다.

서로 다른 프로세서나 다른 타입의 툴체인에서 빌드 된 바이너리는 혼용할 수 없다.

 만약, so 파일의 elf 형식이 (GNU/Linux) 이고 실행파일의 형식이 SYSV인 경우, 실행파일 빌드 시 -D_GNU_SOURCE를 추가하고 빌드하면 so 파일을 로드 할 수 있다.



2. xxx.so 파일 이름 확인

 실제 사용하고 싶은 라이브러리와 에러 메시지의 so 파일 이름을 확인한다. 

 간혹 so 파일의 path가 같이 출력되거나 so파일 뒤에 ".0" 이 붙는 등 이름이 다른 경우가 있는데, 이는 so 파일 빌드 시 -soname 옵션을 사용해 로드 할 so 파일의 이름을 그렇게 정했기 때문이다. 

so 파일의 빌드 옵션을 수정하거나, ln 명령어를 사용해 링크를 만들어 시용하면 된다.

$ ln -sf xxx.so.0 xxx.so



3. LD_LIBRARY_PATH 확인

LD_LIBRARY_PATH의 위치를 확인 후 해당 위치에 라이브러리가 존재하는지 확인한다.

$ echo $LD_LIBRARY_PATH
/Lib

so 파일 위치를 추기하려면 LD_LIBRARY_PATH에 원하는 path를 추가하면 된다.

$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/xxx_path
$ export LD_LIBRARY_PATH



댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

windows에서 간단하게 크롬캐스트(Chromecast)를 통해 윈도우 화면 미러링 방법

아두이노(arduino) 심박센서 (heart rate sensor) 심박수 측정 example code

Embedded Linux USB Ethernet Gadget 사용하기

리눅스 디바이스 드라이버 기초와 예제