Hebang
(usa Arch Linux)
Enviado em 10/01/2011 - 11:24h
Olá pessoal!
Finalizei o desenvolvimento de um programa em C++ que faz uso de várias bibliotecas. Porém preciso que esse código rode em várias distros do Linux, de várias versões diferentes.
Logo, a primeira solução que me veio a cabeça era compilar esse código em uma distro antiga (Fedora 3), carregar as libs nativas desse Linux com o executável e dizer para o executável carregar essas libs ao invés da do sistema. Algo do tipo:
1) copia as libs usadas pelo executável do diretorio padrao do sistema para uma pasta libs/
2) compilar o codigo informando ele para carregar as libs da pasta libs/, e não /usr/lib/
Para isso, na linha de compilação do g++, coloquei a opção -Wl,-rpath,/opt/my_code/libs/
Compilei nesse Fedora 3, e ele executou perfeitamente. dei um ldd no executavel para garantir que ele carregava as libs de /opt/my_code/libs/.
Copiei o executavel e a pasta libs/ para um ubuntu 10.10 e tentei rodar o código, porém o seguinte erro foi retornado:
/usr/bin/my_code: relocation error: /opt/my_code/libs/libc.so.6: symbol _dl_tls_get_addr_soft, version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference
Alguem saberia o que isso significa, e como posso resolver?
Se alguém tiver uma idéia melhor de como tornar meu código portável, será muito bem vinda.
Acredito que haja como, pois vários softwares de código aberto fazem isso (como os navegadores Firefox e Chrome quando são instalados em Linux).
Muito obrigado pela atenção de todos!