컴파일된 실행 파일

컴파일된 실행 파일

예를 들어, 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)")으로 태그를 지정하고 세부 정보를 제공해야 합니다. 필수 라이브러리 . 다음 명령을 사용하여 실행 파일이 사용하는 라이브러리를 볼 수 있습니다 ldd. run ldd program. 이전 부분이 =>중요합니다. 예를 들어 libgtk-3.so.0기본 GTK3 라이브러리인 버전 0(버전 1이 있었다면 버전 0과 호환되지 않으므로 버전 번호가 변경되었습니다). 이러한 라이브러리 중 일부는 수년 동안 변경되지 않았기 때문에 모든 사람이 갖게 될 것입니다. 여러 배포판과 여러 버전을 살펴보는 경험이나 비교를 통해서만 알 수 있습니다. 다른 배포판 사용자는 호환되는 라이브러리 버전이 있는 경우 동일한 바이너리를 실행할 수 있습니다.

관련 정보