私はLazarusと呼ばれるDelphiの良い代替IDEを見つけました。しかし、プログラマーには質問はありません。
そうですか?静的リンクすべてのLinuxディストリビューションでLinuxバイナリを使用できますか?つまり、どのLinuxディストリビューションに構築したかは問題ではありません。 Debian/ArchLinux/Ubuntu/OpenSUSE/...などで動作しますか?
私が調査したところ、実際には32ビットと64ビットだけが重要ですか?投稿する前に確認したかったです。
ベストアンサー1
この回答は、「私のバイナリはすべてのディストリビューションで実行されますか?」というより一般的な質問について最初に書かれていますが、後半では静的にリンクされたバイナリについて説明します。
静的に接続されたHello Worldよりも複雑な場合、答えは次のようになります。おそらく。
答えを仮定すると、distro Xでテストする必要はありません。はいX番号
ソフトウェアをバイナリ形式で配布するには、以下に制限します。
あなたのソフトウェア使用領域(デスクトップ、サーバー、組み込み...)に広く使用されているディストリビューション
それぞれ最新バージョン1~2個
それ以外の場合は、さまざまなサイズ、バージョン、年齢の何百ものディストリビューションが作成されます(10年前のディストリビューションはまだ使用中です)。そしてサポート)。
テストを見てください。それ以外の場合は、何が間違っている可能性があるかについてのヒントがいくつかあります。
必要なツール/ライブラリパッケージの名前は、ディストリビューションごとに異なるか、同じディストリビューションの異なるバージョンでも異なるように指定されます。
必要なライブラリが新しくなっているか、古いです(間違ったバージョン)。プログラムがリンクできるとしても、正しいライブラリーに関連付けられていると仮定しないでください。
同じライブラリ(ディスク上のファイル)がディストリビューションによって名前が異なるため、リンクが失敗する
64ビットの32ビット:32ビット環境がインストールされていないか、いくつかの重要ではない32ビットライブラリが32on64環境外の追加パッケージに移動された可能性があるため、この場合は追加の依存関係があります。
Shell: Bash バージョンを想定しないでください。 Bashを想定しないでください。
ツール:POSIX以外のコマンドラインツールがどこにあると仮定しないでください。
ツール:ディストリビューションのGNUバージョンがツールを認識してもオプションが認識されません。
/proc
カーネルインタフェース:コンピュータにファイルが存在するか構造があるため、ファイルの存在や構造を想定しないでください。Java:あなたのプログラムがテストなしでSLESに同梱されているIBM JREで実行されると本当に確信していますか?
ボーナス:
- 命令セット:コンピュータでコンパイルされたバイナリは、以前のハードウェアでは実行されません。
はい静的リンク(または:必要なすべてのライブラリをソフトウェアでバンドルする)解決策は何ですか?技術的に可能であっても、関連コストが高くなる可能性があります。残念ながら、答えは「いいえ」かもしれません。
セキュリティー: ライブラリーの更新に対する責任は、ソフトウェアユーザーから自分自身に移されます。
サイズと複雑さ: 静的にリンクされた GUI プログラムを構築する楽しみのためです。
相互運用性:あなたのソフトウェアがある種の「プラグイン」の場合は、ソフトウェアの呼び出しに依存します。
ライブラリの設計:プログラムをGNU libcに静的にリンクし、ネームサービス(
getpwnam()
など)を使用すると、libcのNSS(名前サービススイッチ)に動的にリンクされます。ライブラリの設計:プログラムに静的にリンクされたライブラリは、データファイルやその他のリソース(タイムゾーンやロケール設定など)を使用します。
上記のすべての理由により、テスト必須です。
KVM やその他の仮想化技術を熟知し、サポートする各デプロイメントの VM を保持します。各仮想マシンでソフトウェアをテストします。
これらのディストリビューションの最小インストールを使用してください。
制限された一連のコマンド(SSE 4なしなど)を使用してVMを作成します。
ldd
静的にリンクされているかバンドルされています:バイナリが実際に静的にリンクされているか/バンドルライブラリのみが使用されていることを確認するには、バイナリを確認してください。静的リンクまたはバンドルのみ:空のディレクトリを作成し、ここにソフトウェアをコピーします。
chroot
このディレクトリに移動してソフトウェアを実行します。