한 서버에서는 최신 라이브러리를 사용하고 이전 서버에서는 바이너리를 사용하여 소스를 컴파일합니다.

한 서버에서는 최신 라이브러리를 사용하고 이전 서버에서는 바이너리를 사용하여 소스를 컴파일합니다.

소스에서 소프트웨어를 컴파일하려면 최신 라이브러리가 필요 libpcre3-dev하지만, 내 서버에 있는 운영 체제(Ubuntu)의 현재 배포판에는 이전 버전만 있고 libpcre3-dev사용 가능한 백포트가 없습니다.

libpcre3-dev최신 버전으로 별도의 서버에서 바이너리를 컴파일 하고 실제 서버에 바이너리를 다시 설치할 생각입니다 . 두 가지 질문이 있습니다.

  1. 이것이 작동합니까? 내 주요 관심사는 libpcre3내 서버에 여전히 이전 버전이 있고 libpcre3바이너리가 최신 버전으로 컴파일되었더라도 런타임 시 여전히 최신 버전이 필요하다는 것입니다 libpcre3-dev.

  2. 내 서버에 바이너리를 다시 설치하는 가장 좋은 방법은 무엇입니까? 바이너리를 복사하거나 .deb패키지에 넣고 (가능한 경우) 패키지 관리자를 사용하여 설치하시겠습니까?

답변1

프로그램에 서버에서 사용할 수 없는 새로운 기능이 필요한 경우 해당 기능은 런타임에 사용할 수 없으며 프로그램이 실행되지 않을 수 있습니다.

라이브러리를 정적으로 연결할 수 있습니다. 단점은 프로그램과 별도로 라이브러리를 업그레이드할 수 없다는 것입니다. 이 버전의 라이브러리에서 보안 취약점이 발견되면 프로그램을 다시 빌드해야 합니다. -lpcre3링커 명령줄에서 /usr/lib/libpcre3.a.

소프트웨어가 설치된 동일한 디렉토리에 라이브러리를 동적으로 링크하고 복사할 수 있습니다. 소프트웨어는 이 추가 디렉터리를 포함하도록 라이브러리 로드 경로를 설정하는 래퍼 스크립트를 통해 시작됩니다.

#!/bin/sh
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/my-software/lib"
/opt/my-software/bin/foo "$@"

답변2

첫 번째 질문은 실제로링크이므로 정적으로 링크하는지 여부에 따라 다릅니다. 이렇게 하고 두 플랫폼 모두 동일한 아키텍처를 갖고 있다면 제대로 작동할 것입니다.

자체 컴파일된 바이너리를 설치하는 좋은 방법은 다음을 사용하는 것입니다.설치 확인. 즐겨 사용하는 패키지 관리자를 사용하여 설치 및 제거할 수 있는 데비안 패키지를 생성합니다.

관련 정보