CentOSシステム用のEmacsの最新バージョンをビルドしたいのですが、ビルドはDebianシステムで実行する必要があります1git.sv.gnu.org
。どちらのシステムも x86_64 アーキテクチャで動作します。
以前はこの操作に関するガイドラインを見たことがありますが、今はそのガイドラインが必要ですが、見つかりません(たとえば、Google検索に適したキーワードが見つかりませんでした)。
目的の指示が見つかりません。Emacsのインストール情報、だれでも。繰り返しますが、これは間違った検索戦略によるものかもしれませんが、この情報が見つからなかった理由は、それが一般的なUnixの知識(例えば、タールボールの解凍や解凍されたコンテンツの所有権の変更)である可能性があると思いました。 、Emacsに限定されない。だからここに質問を投稿します。
要約すると、私の目標は、ホストシステムにライブラリを必要としないスタンドアロンのEmacs実行可能ファイルを作成することです。
これを達成するためにEmacsをコンパイルするにはどの設定を使用する必要がありますか?より具体的には、次の順序をどのように変更する必要がありますか?
./autogen.sh
./configure --prefix=${INSTALL_DIR} --with--m17n-flt
./make bootstrap
./make install
...これを行うには?
それが価値がある場合は、「ビルド」(Debian)システムcc
では/usr/bin/x86_64-linux-gnu-gcc-6
。
1長いストーリーですが、デフォルトではDebianシステムではrootアクセス権がありますが、CentOSシステムではrootアクセス権はありません。
答え1
静的にリンクされたバイナリは、オプションを-static
リンカに渡すことによって生成されます。リンカーを直接実行しないので、ビルドシステムを介して(そしておそらくコンパイラを介して)リンカーをインポートする必要があります。
EmacsはGNUパッケージなので、おそらくautotoolsを使って構築されているでしょう。この場合は、次の変数を使用する必要がありますLDFLAGS
。
./configure LDFLAGS="-static"
残念ながら、これを試した後、私はemacsが静的バイナリで動作しない多くのglibc
関数呼び出しを使用していることを発見しました。これの一部として構築された「bootstrap-emacs」は、これにより起動時にsegfaultも発生します。したがって、静的ビルドではこれを行うことはできません。
代わりに、次のいずれかを実行できます。
- DebianシステムでCentOS chrootを設定してビルドし、バイナリをCentOS chrootにコピーします。
代替プレフィックスを使用して自動化されたツールキットを構築し、ホームディレクトリで実行できます。
./configure --prefix=$HOME/emacs --exec-prefix=$HOME/bin
その後、Emacsは以下にインストールされ、
$HOME/bin
以下のすべてのサポートファイルを見つけるようにコンパイルされます$HOME/emacs
。もちろん、これはCentOSシステムで必要なライブラリを使用できると仮定しますが、そうでないかもしれません。- 君はただできる尋ねるローカルルートはemacsをインストールします...