Como @ rhn-grg apontou, se ambas as máquinas têm a mesma arquitetura de processador, então a única diferença que pode impedir que seu binário seja executado em outra máquina são as bibliotecas com as quais seu binário está vinculado - por padrão binários são vinculados eles carregam as bibliotecas dinamicamente, o que permite manter os binários pequenos e também permite usar a RAM com mais eficiência, já que a biblioteca é carregada uma vez, mas pode ser usada por vários processos.
No entanto, nos casos em que você precisa garantir a "portabilidade" de um binário, você pode dizer a gcc
para vincular estaticamente o binário - isto é, incluir todas as bibliotecas que ele usa no binário - isso produzirá um binário bastante grande não dependerá de nenhuma biblioteca externa.
Eu nunca tive a necessidade de fazer isso, no entanto, agora, quando você conhece as palavras mágicas (link estático, binário portátil), você pode encontrar muitas sugestões no Google, por exemplo isto :
Normalmente, quando você faz o download de um tarball de código-fonte, você faz o
padrão "configure; make; make install" para construí-lo. Se você quiser um
binário vinculado estaticamente, substitua o simples "make" por:
make SHARED=0 CC='gcc -static'
Para ver de quais bibliotecas seu binário depende, você pode usar o comando ldd
:
$ ldd /bin/bash
linux-vdso.so.1 => (0x00007fff6dbff000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f8e37337000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8e37133000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8e36d75000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8e37587000)