Linuxバイナリは、あらゆる種類のディストリビューションに共通していますか?


15

Linuxにmodel sim VHDLシミュレーターをインストールします。マニュアルには、RedHatまたはSuseのみがサポートされていると書かれていますが、Ubuntuにインストールしようとしました。そして、問題なくインストールできました。

ここに画像の説明を入力してください

  • Linuxバイナリはあらゆる種類のディストリビューションに共通していますか?つまり、ディストリビューションAでプログラムを作成した場合、どのLinuxでも実行できると確信できますか?
  • 商用プログラムベンダーのほとんどが、プログラムが特定のディストリビューションで実行されていると言っているのはなぜですか?(主にUbuntuではなくRedhatとSuse)

回答:


15

これは2つの質問です。

Linuxバイナリはすべてのディストリビューションに共通ですか?

場合によります:

  • プログラムがLinuxカーネル以外で何も使用していない場合、32ビットまたは64ビットの質問を除き、プログラムはユニバーサルになります。Linuxの「hello world」(「hello world」をターミナルウィンドウに出力するだけの最小限のプログラム)は、おそらくディストリビューションから独立している可能性があります。
  • プログラムがカーネル以外のライブラリまたはサービス(Linuxのほとんどであり、カーネルがかなり小さい)を使用している場合、含まれるライブラリ、これらのライブラリのバージョン、およびそれらの配置場所に違いがあります。したがって、この(最も一般的な)場合、分布は等しくありません。

多くの商用プログラムが、1つまたはいくつかのディストリビューションでしか動作しないと言うのはなぜですか?

あるので、Linuxディストリビューションの非常に大きな数は、誰もがそれらのすべての彼らのプログラムをテストしたいと考えていません。

商業ベンダーは通常、ソフトウェアをテストしたディストリビューションのみをサポートしていると言います。他のディストリビューションで動作する場合と動作しない場合がありますが、ベンダーの観点からは、サポートしていないディストリビューションで動作しない場合は文句を言うことができないというだけです。

どのディストリビューションがテスト用に選択されるかは、ベンダーが顧客が使用することを期待しているものによって異なります。商用/プロフェッショナルプログラムは一般に、おそらく「既存の顧客が使用しているディストリビューションを数えるだけで、「OSにお金を払った人はソフトウェアにお金を払う可能性が高い」」と同様の理由で企業向けディストリビューションを選択します。

上のマーク・シャトルワース(我々は最初の場所でのUbuntuを持っている理由である男に)も参照のUbuntuとDebianとのバイナリ互換性 - Debianはある最も近い分布の相対的なのUbuntuの。


2

RedHatとSUSEはどちらもエンタープライズLinuxの長い伝統を持ち、それらのパッケージを作成してテストすることができました。時間が経つにつれて、Ubuntuで動作するようにテストされたパッケージの例がさらに増えるでしょう。実際、昨年からこのようなパッケージの多くは、Ubuntuで動作するようにテストされています。Canonicalがより多くのベンダーと契約を結ぶにつれて、Ubuntu認定パッケージがさらに増えていきます。

最初の質問:すべてのディストリビューションで実行するプログラムを作成する場合は、静的(動的と比較して)実行可能ファイルを作成します。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ディストリビューション用の仮想マシンを作成し、そこでプログラムを実行します。


1

2番目のjg-faustusの返信ですが、パッケージ形式にも注意する必要があります。実行可能ファイル自体が移植可能で、必要なすべてのライブラリが存在する場合でも、異なるディストリビューションは異なる場所にファイルを配置し、インストールされたパッケージを管理するために異なるツールを使用します。ベンダーが製品をRPMパッケージとしてパッケージ化する場合、「 alien 'を変換して、UbuntuなどのDEBベースのディストリビューションでインストールします。

ソフトウェアがソースコードとして配布されている場合は、自分でコンパイルすることもできます。その時点で、実行可能ファイルは特定のシステムに合わせて調整されます(ただし、ubuntuパッケージマネージャーはそれを認識しません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.