컴파일된 실행 파일

컴파일된 실행 파일

예를 들어 Ubuntu를 실행하는 시스템에서 GTK 3을 사용하는 간단한 C 프로그램을 컴파일한 경우 다른 Linux 버전에서도 실행할 수 있습니까?

참고: 실제 질문은 "컴파일된 프로그램에 Linux용 레이블을 지정해야 합니까, 아니면 Ubuntu에만 레이블을 지정해야 합니까?"입니다.

예. 내 다운로드 페이지에 다음과 같은 라벨을 붙여야 할까요?

Windows
    program.exe

Linux
    program

Macintosh
    program.app

또는

Windows
    program.exe

Ubuntu < Version 17.04
    program

Macintosh
    program.app

답변1

Linux 실행 파일은 Linux 배포판에만 국한되지 않습니다. 그러나 이는 프로세서 아키텍처 및 라이브러리 버전 세트에만 적용됩니다.

실행 파일어느운영 체제는 프로세서 아키텍처에 따라 다릅니다. Windows 및 Mac 사용자는 이러한 운영 체제가 거의 단일 아키텍처에서만 실행되기 때문에 크게 신경 쓰지 않습니다. (OSX는 다중 프로세서 아키텍처에서 실행되었으며 OSX 애플리케이션은 일반적으로 지원되는 모든 프로세서 아키텍처에 대한 코드가 포함된 번들로 배포되었지만 최신 OSX는 amd64 프로세서에서만 실행됩니다. Windows는 32비트 및 64비트 Intel 프로세서에서 모두 실행됩니다. , 따라서 "32비트" 및 "64비트" Windows 실행 파일을 찾을 수 있습니다.)

Windows는 프로그래머가 프로그램과 함께 사용하는 모든 라이브러리를 번들로 묶도록 하여 라이브러리 종속성 문제를 해결합니다. Linux에서는 프로그래머가 라이브러리를 번들로 묶을 필요가 없고 사용자가 시기적절한 보안 업데이트와 라이브러리에 대한 버그 수정을 받을 수 있다는 이점이 있지만 배포판 릴리스에 따라 프로그램을 다르게 컴파일해야 하는 비용이 있기 때문에 이 작업을 수행하는 것은 일반적이지 않습니다. .

따라서 바이너리에 "Linux, 64비트 PC(amd64), Ubuntu 17.04용으로 컴파일됨"(또는 32비트 실행 파일인 경우 "32비트 PC(i386)")이라는 레이블을 지정하고 필수 라이브러리. lddrun 명령을 사용하여 실행 파일이 사용하는 라이브러리를 볼 수 있습니다 ldd program. 앞의 부분이 =>중요합니다. 예를 들어 libgtk-3.so.0버전 0이 있는 기본 GTK3 라이브러리입니다(버전 1이 있었다면 버전 0과 호환되지 않으므로 버전 번호를 변경하는 이유입니다). 이러한 라이브러리 중 일부는 수년 동안 변경되지 않았기 때문에 모든 사람이 갖고 있을 것입니다. 여러 배포판과 여러 릴리스를 살펴보는 경험이나 비교를 통해서만 이를 알 수 있습니다. 다른 배포판 사용자는 호환되는 라이브러리 버전이 있는 경우 동일한 바이너리를 실행할 수 있습니다.

관련 정보