私は主に教育目的、つまりビルドプロセス自体だけでなく、開発/デバッグのためのシステムを構築しています。
これが私が達成したいものです。
システムツールチェーンから完全に独立したツールチェーンをインストールします。
1.1。 GCC(C, C++) が必要です。私は、オペレーティングシステムからコンパイラを切り離し(たとえば、必要であると判断された場合はアップグレード)、デバッグ/リリース用のデバッグシンボルとソースコードを使用してlibstdc ++をビルドできるようにしたいと思います。 「分離」はまた、GCCが一般的なハードコーディングされたパスを含まないことを望むことを意味します。現在のシステムGCCは5.1.1で、5.2.0を構築します。
1.2上記の2つの理由から、libc / glibcは良い選択です。望ましいですか?おそらく私のシステムにインストールされているのと同じバージョンを使用します。
1.3.メイク/binutils。どのような要件/提案がありますか?おそらく私のシステムにインストールされているのと同じバージョンを使用します。
次のように、ソースでより頻繁に使用されるライブラリ/ツールの一部を構築します。
2.1.ジク
2.2.集中治療室
2.3。オープン型SSL
2.4.広報
2.5.Qt
など。
私はすべてのデバッグシンボルとソースコードを使用して、ソースからビルドされた他の依存関係のデバッグ/リリースビルドに関連付けられている各バージョンのデバッグ/リリースビルドをビルドするのが好きなので、ソースからビルドします。 。また、私はさまざまな設定オプションを試すのが好きだからです。
他のライブラリ/ツールの場合は、システムリポジトリのパッケージを使用してください。
3.1。これには、上記のライブラリ(libxbc、libgstreamer、またはQt用dbusなど)の要件が含まれます。
ルートアクセス権がありますが(VirtualBoxのFedora VM)、それを使用したくありません。
私は見たことがない最初からLinuxそして、私がやろうとしていることに関する有用な情報がたくさんありますが、「ホスト」システムと完全に分離したくないという点で根本的な違いがあると思います。私のツール/ライブラリに常にシステムの前にインストールパスを検索させ、それ以外の場合は、リポジトリにインストールされている他のすべてのエントリにアクセスできるようにしたいです。また、システムツール(GCC / binutilsなど)とライブラリ(システムは私のものではなく、独自のlibcまたはOpenSSLを使用する必要があると思います)を削除したくありません。システムが何かを構築する必要がある場合は、私のツール/ライブラリを見つけてはいけません。
私の質問。
5.1上記の1.3で述べたように、システムのmake / binutilsを使用する必要がありますか、それともソースから直接構築する必要がありますか?
5.2「ホスト」システムにアクセスする必要がある場合、chroot環境は実現可能か理想的ですか?
5.3。この作業を始める前に調査する必要があるものはありますか?
私が少し浅いことは認めますが、いつもそうすべてを学んだので問題にはなりません。
関連文書へのヘルプ/提案/ポインターを歓迎します。
Casの答えを解決するために編集されました。
私の目標は最先端ではなく、デバッグビルドを制御することです。--enable-libstdcxx-debug
Fedoraリポジトリ(GCC設定で取得)にlibstdc ++のデバッグ(最適化されていない)バージョンが見つかりません。パッケージに入れると、ソースからGCCを構築する必要はありません。
そして、ビルドプロセスとシステムコンポーネントとのやり取りについてもっと学ぶことはボーナスでしたが、私が本当に望んでいたのは、GDB、シンボリックロード、最適化されたコード、および最適化されていないコードのデバッグを試すことでした。これがまさに最適化されていないバージョンのライブラリを持ちたい理由です。
私は問題に同意します。あなたが言及した「一般的な」方法に従った以前の2回の試みでは、Qt(ソースでビルドすると予想される最も複雑なソフトウェア)をビルドすると例外エラーが発生しました。発生しました。スムーズに進んでいます。そのため、ソースからシステム全体を構築することなく、私が望むものをより徹底的に実行するより良い方法があると思いました。
ソースからすべてをビルドする必要がなく、ソフトウェアバージョンの要件がない場合は、別のディストリビューションに移動できます。つまり、違いを最小限に抑えるために、Fedora VMと同じバージョンのGCC 5.1.1を構築できます。 。私はFedoraパッケージの「ビルドレシピ」にできるだけ近づいてきました。
答え1
これを行う「一般的な」方法は、PATH、LD_LIBRARY_PATH、C_INCLUDE_PATH、CPLUS_INCLUDE_PATHなどのコンパイル済みバージョンを使用するようにユーザーエクスペリエンスを変更することです。
ログインスクリプトでこれらの変数やその他の関連変数(~/.profile
forbash
またはなど)を設定しますsh
。
次に、たとえばgcc 5.20をシステムgccでコンパイルし、ホームディレクトリにインストールします(例:〜/ binのバイナリ、〜/includeのヘッダ、〜/ libのライブラリなど)。
他のコンパイルしたいライブラリ/プログラムにも同じことを行います。
ただし、システムライブラリとの互換性は保証されません。たとえば、Qtの新しいバージョン用にアプリケーションをコンパイルすると、システムのKDE / Qtで正しく(またはまったく)実行されない可能性があります。
個人的には、自分が問題を求めていると思います。システムから離れることが大きいほど、必然的に多くの問題が発生し、複製または理解できるシステムで終わる可能性が低くなります。まあ十分に良い。デバッグされました。必ずしもなければ生きていけないものだけを再コンパイルする方が良いです。新しいパッケージをコンパイルし、システムのパッケージ管理ツール(あなたの場合はrpm)を使ってシステムにインストールする方が良いでしょう。良い)
本当に「最先端の」バージョンが必要な場合は、Fedora RawhideやDebian Sidなどの最先端のアルファトライアルディストリビューションを使用してください。