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)를 통해 윈도우 화면 미러링 방법

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

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

간단한 칼만 필터(Kalman Filter) 소스 코드와 사용 예제