1

この質問は盲目的に明白に思えるかもしれません。私は多数の反対票を投じていることを認識していますが、私は Linux 開発に非常に慣れておらず、しばらくの間だけ取り組んでいます。

私は C++ で ubuntu 12.04 (カーネル 3.2.0) でアプリケーションを作成し、これを scp 経由で別のデバイスの ubuntu 8.04 (カーネル 2.6.30) インストールにコピーしています。単純に説明できない非常に奇妙な動作に気付きました。以前のバージョンでこの実行可能ファイルを実行できると単純に想定していましたが、実際にはそうではない可能性があることに気付き始めています。将来、アプリケーションを構築する Linux のバージョンが、現場で実行されるバージョンと同一であることを確認する必要がありますか?? それとも、アプリケーションを実行するデバイス上で、ソース コードからアプリケーションを直接ビルドする必要がありますか? 私は Linux 開発は初めてですが、C++ は初めてではないので、この質問は簡単に思えるかもしれませんが、これは本やチュートリアルなどで見たことのない種類の問題です。

4

1 に答える 1

3

ほとんどの場合、あなたを止めるのはカーネルではなく、glibc です。

glibc には下位互換性があります。つまり、古いバージョンにコンパイルおよびリンクされたプログラムは、実行時に新しいバージョンとまったく同じように動作します。その逆は互換性がありません。

もちろん、実行したいディストリビューションでビルドするのが最善です。それができない場合は、最も古い glibc がインストールされているものに基づいてビルドしてください。

また、システム glibc よりも古い glibc をビルドしてリンクするのは非常に困難です。glibc をインストール/ビルドすると、システムが必要以上に台無しになる傾向があります。古い Linux で VM をセットアップし、代わりにそれを使用します。

于 2012-06-13T11:53:09.743 に答える