Executando a biblioteca C++ 11 com libc mais antiga

Executando a biblioteca C++ 11 com libc mais antiga

Eu escrevi uma biblioteca compartilhada usando recursos C++ 11, compilada com gcc 4.8, libc 2.18, que precisa ser executada em uma máquina CentOS 6 do cliente, que possui gcc 4.4.7, libc 2.12. Existem alguns símbolos nesta biblioteca que não são encontrados na libc 2.12, então como posso usar esta biblioteca no CentOS 6. Tenho flexibilidade em como, onde, em qual máquina a biblioteca pode ser compilada, mas eventualmente ela deve ser utilizável no cliente CentOS 6, onde os pacotes não podem ser tocados. Posso compilá-lo com DevTools-2 no CentOS 6 ou pode haver algum problema relacionado à ABI. Por favor, deixe-me saber se há alguma outra sugestão. Desde já, obrigado.

Responder1

Compile no mesmo sistema daquele que o executa. Você pode precisar recompilar para um salto de versão da distribuição (por exemplo, 7 para 8) e às vezes entre elas.

Se você usar diferentes versões do compilador, vocêpoderencontre incompatibilidades entre as bibliotecas auxiliares compartilhadas para o compilador, bibliotecas base C ou C++ (provavelmente) ou diversas dependências externas. Não é uma bagunça que eu gostaria de depurar.

Responder2


Recursos do C++ 11, compilados com gcc 4.8

? Por que não g++ 4.8?

Sugestão: compile sua biblioteca estaticamente com libstdc++.a → Acho que as funções do C++ 11 estão em *libstdc++-devel, não em glibc.

O devtoolset-2-libstdc++-devel-4.8.2 vem com bibliotecas estáticas:

/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2/{ libstdc++.a, libstdc++_nonshared.a }


informação relacionada