Depende de como o aplicativo é criado. Um problema pode ser os caminhos do sistema que podem diferir de distribuição para distribuição. Outro problema são as bibliotecas compartilhadas que podem não estar instaladas no sistema de destino ou, pior, podem ser instaladas em versões incompatíveis.
Uma solução para o problema das bibliotecas é construir binários vinculados estaticamente ou (como é comum no OS X) apenas enviar todas as bibliotecas requeridas com o aplicativo e, se necessário, configurar LD_LIBRARY_PATH de acordo (embora essa seja uma má idéia para muitos razões).
Uma maneira fácil de verificar se o seu programa será executado é listar todas as bibliotecas vinculadas usando o ldd e ver se elas existem no sistema de destino.
Exemplo usando o http:
do apache[lukas@web1 /]$ ldd /usr/sbin/httpd
libm.so.6 => /lib64/libm.so.6 (0x00002b1ec3aaf000)
libpcre.so.0 => /lib64/libpcre.so.0 (0x00002b1ec3d32000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00002b1ec3f4e000)
libaprutil-1.so.0 => /usr/lib64/libaprutil-1.so.0 (0x00002b1ec4167000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002b1ec4384000)
libldap-2.3.so.0 => /usr/lib64/libldap-2.3.so.0 (0x00002b1ec45bc000)
liblber-2.3.so.0 => /usr/lib64/liblber-2.3.so.0 (0x00002b1ec47f7000)
libdb-4.3.so => /lib64/libdb-4.3.so (0x00002b1ec4a05000)
libexpat.so.0 => /lib64/libexpat.so.0 (0x00002b1ec4cfa000)
libapr-1.so.0 => /usr/lib64/libapr-1.so.0 (0x00002b1ec4f1d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b1ec5144000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002b1ec535f000)
libc.so.6 => /lib64/libc.so.6 (0x00002b1ec5564000)
libsepol.so.1 => /lib64/libsepol.so.1 (0x00002b1ec58bb000)
/lib64/ld-linux-x86-64.so.2 (0x00002b1ec3892000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x00002b1ec5b01000)
libpq.so.4 => /usr/lib64/libpq.so.4 (0x00002b1ec5d06000)
libsqlite3.so.0 => /usr/lib64/libsqlite3.so.0 (0x00002b1ec5f28000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00002b1ec6183000)
libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00002b1ec6399000)
libssl.so.6 => /lib64/libssl.so.6 (0x00002b1ec65b2000)
libcrypto.so.6 => /lib64/libcrypto.so.6 (0x00002b1ec67fc000)
libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00002b1ec6b4e000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00002b1ec6de3000)
libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00002b1ec6ffc000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00002b1ec722a000)
libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00002b1ec742c000)
libz.so.1 => /usr/lib64/libz.so.1 (0x00002b1ec7652000)
libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00002b1ec7866000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00002b1ec7a6e000)
Se todas as bibliotecas vinculadas existirem em uma versão compatível no sistema de destino, é provável que seu aplicativo possa ser iniciado. A partir daí, são principalmente caminhos que precisam ser ajustados.