여러 가지 구현이 있는 공유 라이브러리를 연결하려고 합니다. 특히 blas, openblas 및 atlas는 모두 /usr/lib/libblas.so
Ubuntu 14.04의 대안을 통해 동일한 바이너리 인터페이스를 제공합니다(12.04의 유사하지만 동일하지는 않은 설정). 링커 와 함께 GCC를 사용하면 -lblas
실제로 대체 링크를 통해 실제 구현으로 해결되는 것 같습니다. 예를 들어 openblas를 설치하면 실제 openblas 바이너리로 연결되고 빌드를 설치하면 my system atlas가 설치된 실행 파일의 경우 동적 링커는 대체 링크를 볼 수 없기 때문에 라이브러리를 로드할 수 없습니다.
GCC가 "대체" 심볼릭 링크를 dl 대상으로 사용하여 실제로 예상대로 작동하도록 하는 방법이 있습니까 update-alternatives
?
답변1
심볼릭 링크 확인은 여기의 기능입니다. libblas.so
로 구문 분석하면 libblas.so.3
생성된 실행 파일이 특정 so 버전에 고정됩니다. (so 버전에 대한 변경은 라이브러리의 바이너리 인터페이스가 이전 버전과 호환되지 않게 변경될 때 발생하므로 3
이는 예상된 것입니다.libblas.so.3
문제는 대상 시스템에 없는 것 같습니다 libblas.so.3
. 따라서 다음을 제안합니다.
libblas.so.3
귀하의 응용 프로그램이 연결되어 있는지 확인하십시오.대상 시스템에서 실제 libblas.so에서 원하는 이름으로의 심볼릭 링크를 생성하여
libblas.so.3
이 심볼릭 링크가 LD_LIBRARY_PATH에서 발견되도록 합니다.mkdir ./mylib ln -s /usr/lib/libblas.so ./mylib/libblas.so.3 LD_LIBRARY_PATH=$PWD/mylib:$LD_LIBRARY_PATH ./myexecutable