Como construir uma instância do Emacs para rodar em um sistema x86_64 diferente daquele em que foi construído?

0

Eu quero construir a versão mais recente do Emacs (de git.sv.gnu.org ) para um sistema CentOS, mas o edifício deve ser feito em um sistema Debian 1 . Ambos os sistemas são executados em arquiteturas x86_64.

Já vi instruções para fazer esse tipo de coisa antes, mas agora que preciso delas, não consigo encontrá-las (ou seja, não encontrei as palavras-chave certas para minhas pesquisas no Google).

Não consigo encontrar as instruções que estou procurando em as informações de instalação do Emacs , ou. Novamente, isso também pode ser devido a uma estratégia de pesquisa defeituosa, mas ocorreu-me que talvez a razão pela qual eu não esteja encontrando essa informação é que ela é simplesmente um conhecimento Unix genérico (por exemplo, descompactar uma bola de alcatrão ou alterar propriedade do conteúdo descompactado), não específico do Emacs. Por isso, estou postando a pergunta aqui.

Para recapitular, meu objetivo é criar um executável do Emacs independente que não exija nenhuma biblioteca de seu sistema host.

Quais configurações devo usar para compilar o Emacs para atingir esse objetivo? Mais especificamente, como eu teria que mudar a seguinte sequência

./autogen.sh
./configure --prefix=${INSTALL_DIR} --with--m17n-flt
./make bootstrap
./make install

... para fazer isso?

Por que vale a pena, no sistema "build" (Debian), cc é linkado com link simbólico para /usr/bin/x86_64-linux-gnu-gcc-6 .

1 É uma longa história, mas basicamente, eu tenho acesso root no sistema Debian, mas não no CentOS.

    
por kjo 03.10.2018 / 15:14

1 resposta

0

A maneira de criar um binário vinculado estaticamente é passar a opção -static para o vinculador. Como você não executa o vinculador diretamente, você precisará fazer isso através do sistema de compilação (e provavelmente também através do compilador).

O Emacs é um pacote GNU, então provavelmente usa o autotools para sua compilação. Nesse caso, você precisa usar a variável LDFLAGS :

./configure LDFLAGS="-static"

Infelizmente, ao tentar fazer isso, descobri que o emacs usa um número de chamadas de função glibc que não funcionam em binários estáticos; e o "bootstrap-emacs", que é construído como parte do mesmo, irá se separar da inicialização por causa disso. Então você não pode fazer isso com uma construção estática.

Em vez disso, você pode seguir um destes procedimentos:

  • Você configura um chroot do CentOS na sua máquina Debian na qual você compila e depois copia os binários para o chroot do CentOS
  • Você pode criar um pacote de autotools com um prefixo alternativo, para que ele funcione no seu diretório inicial:

    ./configure --prefix=$HOME/emacs --exec-prefix=$HOME/bin
    

    Isto irá compilar o emacs para que seja instalado em $HOME/bin , com qualquer arquivo de suporte encontrado em $HOME/emacs . Claro, isso pressupõe que as bibliotecas necessárias estão disponíveis na máquina do CentOS, o que pode não ser o caso.

  • Você pode apenas pedir sua raiz local para instalar o emacs para você ...
por 03.10.2018 / 16:03