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



댓글

이 블로그의 인기 게시물

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

쉽게 설명한 파티클 필터(particle filter) 동작 원리와 예제

바로 프로젝트 적용 가능한 FIR Filter (low/high/band pass filter )를 c나 python으로 만들기

간단한 cfar 알고리즘에 대해

base64 인코딩 디코딩 예제 c 소스