최신 배포판을 사용하여 이전 시스템에서 실행될 수 있는 실행 파일을 만드는 방법은 무엇입니까?

최신 배포판을 사용하여 이전 시스템에서 실행될 수 있는 실행 파일을 만드는 방법은 무엇입니까?

일반적으로 오래된 프로그램(Linux 커널 버전 2.4가 설치된 시스템에서 복사됨)이라도 많은 수의 라이브러리에 의존하거나 프레임워크를 사용하지 않는 한 최신 Linux 시스템에서 파일을 실행합니다.

기존 시스템에 복사하면 새 프로그램(종종 int main(){return 0;})도 실행되지 않습니다.

현대 시스템에서 동적으로 링크된 실행 파일을 만드는 방법은 무엇입니까? chroot나 가상 머신에 레거시 시스템을 설정하고 싶지 않습니다. 오래된 라이브러리를 "교차 컴파일"하는 것이 가능합니까?

답변1

레거시 시스템을 별도의 환경(chroot 또는 VM)에 설정하는 것이 가장 쉬운 방법입니다. (Debian에서는 schroot 및 debootstrap을 사용하면 이 작업이 쉬워집니다.64비트 Debian/Ubuntu에서 32비트 프로그램을 어떻게 실행하나요?)

이전 라이브러리 버전을 교차 컴파일하는 것이 가능합니다. "단순히" 이러한 이전 라이브러리용 개발 패키지를 설치하고 컴파일러가 해당 버전을 가리키도록 하면 됩니다. 이전 표준 라이브러리를 수용하려면 컴파일러 자체를 다시 컴파일해야 할 수도 있습니다. 모든 개발 패키지를 올바르게 설치하고 구성하는 데 어려움이 있습니다. 다음을 수행해야 합니다.

  1. 이전 표준 라이브러리를 컴파일합니다.
  2. .a이전 단계에서 생성된 헤더와 파일을 컴파일러에 지정하여 라이브러리 A를 컴파일합니다 . (gcc, pass -nostdinc-nostdinc++option의 경우 다른 컴파일러에는 일반적으로 비슷한 플래그가 있습니다.)
  3. 프로그램이 컴파일될 때까지 종속성 체인을 따라 이를 반복합니다.

관련 정보