제가 작업 중인 임베디드 환경에는 다음 파일이 있습니다.
lrwxrwxrwx 1 root root 19 Aug 23 2016 /usr/lib/x86_64-linux-gnu/libjsoncpp.so.1 -> libjsoncpp.so.1.7.4
-rw-r--r-- 1 root root 213728 Aug 23 2016 /usr/lib/x86_64-linux-gnu/libjsoncpp.so.1.7.4
실행 파일을 와 연결해야 할 때 -ljsoncpp
특별히 이라는 파일을 찾고 있는 것 같습니다 libjsoncpp.so
. 위에는 이 파일(symlink)이 없다는 점에 유의하세요.
질문: 표준 명명 규칙에 따라 올바른 공유 라이브러리 심볼릭 링크를 생성하는 유틸리티가 있습니까?즉, 위의 두 파일이 주어지면 심볼릭 링크를 생성하는 유틸리티가 있습니까?
lrwxrwxrwx 1 root root 19 Aug 23 2016 /usr/lib/x86_64-linux-gnu/libjsoncpp.so -> libjsoncpp.so.1
?
를 사용하여 파일을 생성할 수 있다는 것을 알고 있지만 ln -s...
우연히 들은 의견을 듣고 이 작업을 수행하는 Linux 유틸리티가 있다고 믿게 되었습니다. 그렇다면 수동으로 수행하는 것보다 기존 표준/널리 사용되는 도구를 따르는 것이 좋습니다. 즉, 오타 등과 같은 pebkac 오류를 피하기 위해 나는 그러한 도구에 대한 온라인 참조를 찾을 수 없었으며 내가 우연히 들었던 원래 소스는 더 이상 사용할 수 없습니다.
답변1
링커에서 사용되는 버전 번호가 없는 심볼릭 링크 .so
는 일반적으로 라이브러리 설치 프로세스의 일부로 생성됩니다. 즉, 프로젝트의 Makefile
, CMake 또는 기타 빌드 도구에 의해 생성됩니다.
배포판은 일반적으로 라이브러리를 별도의 런타임 및 개발 패키지로 분할합니다. 버전이 지정되지 않은 .so
패키지는 라이브러리에 연결할 때만 사용되기 때문입니다.
가장 좋은 해결책은 라이브러리를 제공하는 런타임 패키지와 함께 제공되는 개발 패키지를 설치하는 것입니다. 출력의 날짜/크기/버전으로 볼 때 Debian Buster에서 가져온 것처럼 ls
보입니다 libjsoncpp
. 따라서 귀하의 경우에 적합한 솔루션은 설치하는 것입니다. 패키지 libjsoncpp-dev
.