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
댓글
댓글 쓰기