Quem programa em C++ para Linux e precisa gerar binários que rodem em diferentes distribuições sabe como isso pode ser uma tarefa árdua. Isso ocorre porque o programa linkado com uma versão da libstdc++ pode não rodar em outra distribuição que tenha uma versão diferente dessa biblioteca.
Uma forma de contornar esse problema é linkar a libstdc++ de forma estática, mas para linkar ela será necessário linkar também libgcc desta forma. Basicamente o que precisamos fazer é:
$ ln -s `g++ -print-file-name=libstdc++.a` $ g++ -static-libgcc -L. main.cpp
O primeiro comando apenas cria um link simbólico apontando para o caminho da libstdc++ que será utilizada pelo g++ na hora da linkagem.
O comando seguinte seta a flag ‘-static-libgcc’ para fazer com que o linker tente fazer linkagem estática dessa biblioteca e a flag “-L.” adiciona o diretório atual no caminho de busca para as bibliotecas, como criamos o link simbólico para a libstdc++.a ela será usada. Após isso teremos um binário que não tem dependência da libstdc++ nem da libgcc:
$ ldd a.out linux-vdso.so.1 (0x00007fffa45ff000) libc.so.6 => /usr/lib/libc.so.6 (0x00007f9e19548000) /lib/ld-linux-x86-64.so.2 (0x00007f9e19e05000)
Referências: