Como instalar uma versão personalizada do boost no CentOS?

4

Estou tentando compilar e instalar o aumento 1,54 da fonte no CentOS.

A documentação é bastante simples e há muitos tutoriais disponíveis na Internet ( 1 ) ( 2 ) ( 3 ). Foi o que eu fiz:

wget http://sourceforge.net/projects/boost/files/boost/1.54.0/boost_1_54_0.tar.gz
tar -xzvf boost_1_54_0.tar.gz
cd boost_1_54_0
./bootstrap.sh --prefix=/usr/local
./b2 install --with=all

Esta é a compilação e instalação do boost corretamente para /usr/local/lib e tudo parece bem.

Agora eu compilo outro software que requer boost usando gcc e tudo funciona bem. Pelo que entendi, tudo deve estar OK, contanto que gcc encontre as bibliotecas necessárias.

Mas agora o problema: se eu executar meus binários compilados, recebo o seguinte erro:

./myProgram
  ./myProgramm: error while loading shared libraries: libboost_system.so.1.54.0: cannot open shared object file: No such file or directory

Por que as bibliotecas não podem ser encontradas?

Além disso, tentei:

ldconfig
locate boost
  [...]

Mas as bibliotecas de reforço não podem ser encontradas. Eu procurei o caminho manualmente, é:

/usr/local/lib/libboost_system.so.1.54.0

Eu também tentei criar links simbólicos para /usr/lib , mas isso também não corrige isso.

Alguma ideia? O que posso fazer?

    
por Afri 05.11.2013 / 09:08

3 respostas

5

Você precisa adicionar -Wl,-R/usr/local/lib ao LDFLAGS ao compilar seu programa.

-R é uma opção de vinculador (para especificar um caminho de vinculador de tempo de execução) - -Wl instrui gcc a passá-lo para ld .

Com bibliotecas compartilhadas, você deve certificar-se de que elas sejam encontradas pelo vinculador durante a compilação e durante o tempo de execução (cf. sinalizadores -L e -R ).

Você pode usar

$ ldd myProgramm

para verificar se o caminho do vinculador de tempo de execução foi definido corretamente, ou seja, se ele pode encontrar as bibliotecas compartilhadas necessárias no início do programa / quais bibliotecas compartilhadas serão carregadas.

    
por 05.11.2013 / 09:15
1

Como solução alternativa, acredito que você possa prefixar a execução do executável com a variável de ambiente LD_LIBRRAY_PATH e fornecer o caminho para o diretório que contém a biblioteca .so .

Exemplo

$ LD_LIBRARY_PATH=/usr/local/lib ./myProgram

Mas parece que o método que você usou para compilar o aplicativo em questão não está correto. Eu preciso ver seu método de compilação para myProgram ser mais específico.

    
por 05.11.2013 / 09:16
0

Instale a versão 1.54 do boost instalada no CentOS 7 com os comandos abaixo:

sudo wget http://repo.enetres.net/enetres.repo -O /etc/yum.repos.d/enetres.repo

Faça o download do lib64icu42-4.2.1-1mdv2010.0.x86_64.rpm no link abaixo: ftp: // fr2.rpmfind.net/linux/Mandriva/official/2010.0/x86_64/media/main/release/lib64icu42-4.2.1-1mdv2010.0.x86_64.rpm

Instale o RPM:

sudo rpm -ivh lib64icu42-4.2.1-1mdv2010.0.x86_64.rpm

Instale a versão da biblioteca de aumento necessária:

sudo yum install boost-devel-1.54.0

É isso. Tenha um ótimo dia!

link rpm: link

    
por 12.10.2017 / 21:13