再コンパイルせずにすべてのLinuxディストリビューションで実行されるC / C ++ソースコードをコンパイルすることは可能ですか?

アミール・サニヤン:

再コンパイルせずにすべてのLinuxディストリビューションで実行されるC / C ++ソースコードをコンパイルすることは可能ですか?

答えが「はい」の場合、外部(非標準のC / C ++)ライブラリを使用できますか?

ソースコードを配布するのではなく、バイナリアプリケーションを配布したい。

David Schwartz:

いいえ、すべてのLinuxディストリビューションで実行される実行可能ファイルをコンパイルすることはできません。しかし、人々が気にする傾向があるほとんどのディストリビューションで動作する実行可能ファイルをコンパイルすることができます。

  1. 32ビットをコンパイルします。サポートしたい最小CPUレベルに合わせてコンパイルします。

  2. 独自のバージョンのglibcをビルドします。この--enable-kernelオプションを使用して、サポートしたい最小カーネルバージョンを設定します。

  3. 自分で使用する予定のその他すべてのライブラリをコンパイルします。glibcビルドのヘッダーと選択したCPU /コンパイラフラグを使用します。

  4. 静的にリンクします。

  5. 静的にリンクできなかった場合(たとえば、システムのデフォルトの名前解決にアクセスする必要がある場合、またはPAMが必要な場合)は、独自のヘルパープロセスとAPIを設計する必要があります。ソースをヘルパープロセスにリリースし、それら(またはインストーラー)にコンパイルさせます。

  6. サポートする必要のあるすべてのプラットフォームで徹底的にテストします。

ライブラリがこのメカニズムでは機能しない関数を呼び出す場合は、ライブラリを微調整する必要がある場合があります。それは、dlopengethostbynameiconv_open、など。(これらの種類の関数は基本的に動的リンクに依存しています。上記のステップ5を参照してください。これらにリンクすると警告が表示されます。)

また、コードがシステムのゾーン形式やゾーンファイルの場所を理解できないため、注意しないとタイムゾーンが壊れる傾向があります。(これらの警告は表示されません。機能しません。)

これを行うほとんどの人は、サポートされている最小CPUがPentium 4であり、サポートされている最小カーネルバージョンが2.6.0でビルドされています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ