Estou tentando compilar um programa meu que precisa de recursos C++11
e uma versão mais recente de boost
do que está instalado na máquina de destino. Por isso, compilei e instalei gcc 4.9
em algum diretório local ( /secured/local
) com uma compilação em árvore de todas as dependências e binutils. Eu então baixei boost 1.55
e executei ./boostrap.sh --prefix=/secured/local && ./b4 install
para instalar o boost. Ambas as compilações funcionaram bem e gcc -std=c++11
também funciona.
Meu programa é construído usando o cmake com o procedimento usual FindXX.cmake
de localizar arquivos. Estou correndo cmake assim:
cmake ../source/ -DBOOST_ROOT=/secured/local -DCMAKE_EXE_LINKER_FLAGS='-Wl,-rpath,/secured/local/lib'
que encontra com sucesso a minha nova instalação de reforço e a nova versão do gcc. Compilação e ligando ambos funcionam perfeitamente. No entanto, após a execução do meu programa, estou recebendo os seguintes erros:
$ ./surface
./surface: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.20' not found (required by ./surface)
./surface: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.11' not found (required by ./surface)
./surface: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.9' not found (required by ./surface)
./surface: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.19' not found (required by ./surface)
./surface: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.9' not found (required by /secured/local/lib/libconfig++.so.9)
./surface: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.9' not found (required by /secured/local/lib/libboost_program_options.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.11' not found (required by /secured/local/lib/libboost_program_options.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.20' not found (required by /secured/local/lib/libboost_program_options.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.20' not found (required by /secured/local/lib/libboost_filesystem.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.20' not found (required by /secured/local/lib/libboost_regex.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.11' not found (required by /secured/local/lib/libboost_regex.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.9' not found (required by /secured/local/lib/libboost_regex.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.15' not found (required by /secured/local/lib/libboost_regex.so.1.55.0)
Execução de objdump
nos shows de reforço
objdump -x /secured/local/lib/libboost_program_options.so.1.55.0 | grep stdc++
NEEDED libstdc++.so.6
required from libstdc++.so.6:
Parece que ambas as bibliotecas de reforço tentam usar o antigo /usr/lib64/libstdc++.so.6
em vez do novo em /secured/local/lib
. O que fiz de errado no meu procedimento?
Note que tento evitar definir o LD_LIBRARY_PATH
em algum lugar.