답변:
이것은 두 가지 질문입니다.
Linux 바이너리는 모든 배포판에 보편적입니까?
때에 따라 다르지:
많은 상용 프로그램이 왜 하나 또는 몇 개의 배포판에서만 작동한다고 말합니까?
Linux 배포판 은 매우 많기 때문에 아무도 자신의 프로그램을 테스트하기를 원하지 않습니다.
상용 공급 업체는 일반적으로 소프트웨어를 테스트 한 배포판 만 지원한다고 말합니다. 다른 배포판에서는 작동하지 않을 수도 있습니다. 공급 업체의 관점에서 볼 때 지원하지 않는 배포판에서는 작동하지 않으면 불만을 제기 할 수 없습니다.
테스트를 위해 어떤 배포판을 선택할지는 공급 업체가 고객이 사용하기를 기대하는 것에 따라 다릅니다. 상업용 / 전문 프로그램은 일반적으로 "OS를 지불 한 사람들이 소프트웨어 비용을 지불 할 가능성이 높다"는 것과 유사한 추론을 통해 엔터프라이즈 배포를 선택합니다.
우분투와 데비안의 바이너리 호환성 에 관한 Mark Shuttleworth (우선 우리가 처음으로 우분투를 만든 이유)를 참조하십시오 -데비안은 우분투와 가장 가까운 배포판 입니다.
RedHat과 SUSE는 오랫동안 엔터프라이즈 Linux 전통을 가지고 있으며 패키지를 생산하고 테스트 할 수있었습니다. 시간이 지남에 따라 우분투에서 작동하도록 테스트 된 패키지의 예가 더 있습니다. 실제로 작년 이후 많은 패키지가 우분투에서 작동하도록 테스트되었습니다. Canonical이 더 많은 공급 업체와 계약을하면 우분투 인증 패키지가 더 많이 제공 될 것입니다.
첫 번째 질문 : 모든 배포에서 실행되는 프로그램을 만들려면 정적 (동적에 비해) 실행 파일을 만드십시오. statically-linked
실행 파일은 동일하므로 긴 (인텔 / AMD 등) 아키텍처로, 분포 사이에 작업 할 수 있습니다, 시스템 라이브러리에 의존하지 않습니다.
여기 프로그램이 있습니다
int main(void)
{
printf("Hello, World!\n");
return 0;
}
정상적으로 컴파일하자
$ gcc helloworld.c -o helloworld
$ ./helloworld
Hello, World!
$ ldd helloworld
libc.so.6 => /lib/libc.so.6 (0x00007f3cc3481000)
...
$
$ gcc helloworld.c -static -o helloworld_static
$ ./helloworld
Hello, World!
$ ldd helloworld_static
not a dynamic executable
$
그렇다면 VHDL 프로그램으로 무엇을 할 수 있습니까? .rpm 파일을 받아서 alien을 사용하여 .deb로 변환하십시오 . 그런 다음 설치하십시오. 효과가 있었다면 괜찮습니다. 작동하지 않으면 ldd
누락 된 라이브러리 파일을 확인하십시오. 최악의 시나리오에서는 다른 Linux 배포판을위한 가상 머신을 생성하고 거기서 프로그램을 실행하십시오.
두 번째 jg-faustus의 답변이지만 패키지 형식에 대해서도주의해야합니다. 실행 파일 자체가 이식 가능하고 필요한 라이브러리가 모두 있더라도 다른 배포판은 파일을 다른 위치에 놓고 다른 도구를 사용하여 설치된 패키지를 관리합니다. 공급 업체가 제품을 RPM 패키지로 패키지하는 경우 '와 같은 패키지를 사용해야합니다. Ubuntu와 같은 DEB 기반 배포판 아래에서 변환하고 설치하십시오.
그들이 그들의 소프트웨어를 소스 코드로 배포한다면, 당신은 또한 그것을 직접 컴파일 할 수 있습니다.이 시점에서 실행 파일은 특정 시스템에 맞춰질 것입니다 (그러나 우분투 패키지 관리자는 그것을 알지 못할 것입니다).