glibcとuClibcベースのアプリケーションを 1 つのシステムで並行して実行することはできますか?
背景: uClibc とリンクするように構成されたバイナリ gcc ベースのクロスコンパイラがあります。glibc をクロスコンパイルしました。ここで、uClibc ではなく glibc とリンクするようにいくつかのアプリケーションを構築したいと考えています。コンパイラを再構築したくありません。
glibc と uClibc が共存していて、一部のプログラムが一方にリンクし、他のプログラムが他方にリンクしていても問題はありません。ただし、追加のライブラリには問題があります。システム上の各共有ライブラリは、glibc または uClibc (標準ライブラリ関数の個別の ABI を定義する対応するヘッダーを使用) に対して構築されるため、たとえば、glibc プログラムと uClibc プログラムの両方に ncurses が必要な場合は、 ncurses の 2 つのバージョンをビルドし、特定のプログラムに適したバージョンが実行時に確実にロードされるようにする方法があります。または、1 つの共有ライブラリ セットのみを使用し、他の libc にリンクされたプログラムには静的ライブラリを使用することもできますが、それでも 2 セットのライブラリをビルドする必要があります。
はい、完全に可能ですが、LD_PRELOAD_PATH をいじる必要があるかもしれません。静的にリンクしている場合は、動的リンクに変更します。
ABI と include dir には互換性がないため、それらを同じ FHS に混在させることはほとんど不可能です。ただし、ELF の dynamic-linker フィールドを微調整し、gcc/binutils の sysroot 機能を利用することで、どちらもディレクトリ オフセットにインストールできます。進行中の実験は、Prefix/libc として知られる Gentoo コミュニティ [1] にあります。