Emacsインスタンスが構築されたシステム以外のx86_64システムで実行されるようにどのように構築しますか?

Emacsインスタンスが構築されたシステム以外のx86_64システムで実行されるようにどのように構築しますか?

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をインストールします...

関連情報