Eu tenho algumas maneiras de fazer isso, as mais fáceis primeiro:
Tornar o prefixo de instalação flexível é difícil - basta fazer o prefixo de instalação em seu diretório pessoal ou em algum lugar que você possa acessar em qualquer uma das máquinas e usar
make install DESTDIR=/path/to/place/where/binaries/should/be/installed
para instalá-los em algum lugar diferente do prefixo.
Eu pessoalmente tenho meus binários em $HOME/bin
, então meus comandos ficariam assim:
./configure --prefix=$HOME
Alguns programas (eu sei que o FFmpeg é um) podem ser compilados com todas as bibliotecas compiladas no programa, evitando bibliotecas compartilhadas. No caso do ffmpeg (e possivelmente outros) os flags de configuração são --disable-shared --enable-static
.
Você pode usar ldd (name-of-binary-file)
para verificar quais objetos compartilhados precisa e copiá-los para o seu pen drive.
Editar 1
Acabei de fazer uma maneira de obter apenas os nomes das bibliotecas vinculadas, o que é muito útil.
ldd binary-name|sed 's/=>.*//'|sed 's/\t//'|sed 's/\ (0x.*//'
irá obter uma lista de todas as bibliotecas ligadas a.
Além disso, você obterá apenas os arquivos com caminhos codificados:
ldd binary-name|sed 's/=>.*//'|sed 's/\t//'|sed 's/\ (0x.*//'|grep --color=never /
Isso funciona porque apenas as bibliotecas com caminhos codificados têm barras em seus nomes normalmente. Dá uma ideia do que você deve procurar ao fazer a próxima possibilidade.
Editar 2
Você pode usar LD_PRELOAD
e / ou LD_LIBRARY_PATH
para carregar símbolos de bibliotecas especificadas manualmente, negando, assim, o problema dos "caminhos codificados permanentemente" mencionado abaixo.
Se suas bibliotecas tiverem caminhos que são codificados internamente, ouvi falar de uma ferramenta chamada chrpath
que pode alterar os caminhos de execução. Eu tive sucesso (limitado) em simplesmente abrir meus binários em um editor hexadecimal e mudar os caminhos para as bibliotecas compartilhadas, contanto que eles sejam mais curtos do que os que foram originalmente compilados. Eles devem terminar com o caractere terminador de cadeia. (Em C isto é quase sempre 00
). Para ter certeza de que você terá espaço suficiente para alterar o caminho, eu (no sistema eu o compilei) defino o prefixo para algo ridiculamente longo com links simbólicos, assim se suas bibliotecas estiverem em /usr/lib
:
sudo mkdir /OH_THIS_IS_A_VERY_VERY_VERY_VERY_VERY_LONG_DIRECTORY_NAME/
sudo ln -s /usr/lib /OH_THIS_IS_A_VERY_VERY_VERY_VERY_VERY_LONG_DIRECTORY_NAME/lib
mkdir destdir
./configure --prefix=/OH_THIS_IS_A_VERY_VERY_VERY_VERY_VERY_LONG_DIRECTORY_NAME
make
make install DESTDIR=$PWD/DESTDIR
( $PWD
é o diretório atual, a propósito.)
Isso lhe dará muito espaço para mudar os caminhos. Se você tiver espaço sobrando após o caminho real, pode continuar adicionando 00
até chegar ao final do espaço usual. Eu só tive que recorrer a isso com binários que eu compilei para um telefone Android, que tinha o caminho de ncurses
codificado no binário.
Uma última coisa que acabei de encontrar: você pode tornar a localização de ld-linux.so.*
não codificada adicionando isso (adapte-se aos locais dos seus sistemas, execute algo como locate ld-linux
e encontre um semelhante ao abaixo:
-Wl,--dynamic-linker=/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
para sua variável LDFLAGS
.