Nosso cluster de computação executa uma versão muito antiga do CentOS, com um Kernel antigo (2.6.18) e, é claro, bibliotecas e binários antigos. Como atualizar a coisa toda exige muito trabalho em todos os nós, isso não é uma opção.
Estou tentando compilar e usar um programa que requer C++11
e, portanto, versões mais recentes de gcc
(e / ou clang
). Como eu não quero mexer com o sistema, quero fazer isso como um usuário não raiz em alguma árvore de diretórios local.
O problema é que isso gcc
requer um mais novo glibc
que o presente na (s) máquina (s). Portanto, preciso manter uma versão separada e mais recente da glibc
minha lib/
árvore local , provavelmente como descrito aqui .
Onde estou perdido, como codifico os caminhos das minhas bibliotecas locais em todos os binários necessários, por exemplo gcc
, g++
etc.? Definir LD_LIBRARY_PATH como minha lib/
árvore local faz com que todos os binários do sistema não funcionem mais ( ELF file OS ABI invalid
) porque eles querem usar o meu novo libm.so
/ libc.so
contra o qual não foram compilados.
Assim, para envolvê-lo: O que é a maneira correta de manter, uma pilha mais recente desenvolvimento local (contendo glibc
, gcc
etc.) em paralelo com um sistema antigo sem mexer como root?
Como uma pergunta secundária: A configuração de LD_LIBRARY_PATH é publicada como uma solução em todo o SE quando se trata de separar glibc
. Para mim, isso causa os erros acima quando tento executar qualquer sistema binário (como ls
). Por quê? Fiz algo errado ou esse é o comportamento pretendido?
fonte
-rpath
(-Wl,rpath
) para o vinculador, o vinculador também adicionará os caminhos daLD_RUN_PATH
variável de ambiente ao caminho de pesquisa