libGLEW.so.1.11: não é possível abrir o arquivo de objeto compartilhado

3

Estou tentando compilar um programa OpenGL que resulta em:

error while loading shared libraries: libGLEW.so.1.11: cannot open shared object file: No such file or directory

compilação:

 g++ -o triangle triangle.cpp LoadShaders.cpp -I/home/mks/myGL/oglpg/include/ -L/home/mks/myGL/oglpg/lib  -L/usr/lib64 -lglut -lGL -lGLU -lGLEW

Em / home / mks / myGL / oglpg / lib existem todas as bibliotecas:

 libGLEW.so       libGLEW.so.1.11.0  
 libGLEW.a    libGLEW.so.1.11  

(Eu não sou superusuário, então instalei glew na pasta acima)

Se eu fizer:

ldd ./triangle | grep "GLEW"
        libGLEW.so.1.11 => not found

- ATUALIZAÇÃO ---

Compilando:

g++ -o triangle triangle.cpp LoadShaders.cpp -I/home/mks/myGL/oglpg/include/ -L/home/mks/myGL/oglpg/lib -L/usr/lib64 -lglut -lGL -lGLU -lGLEW

ldd ./triangle:

linux-vdso.so.1 =>  
        libglut.so.3 => /usr/lib64/libglut.so.3 
        libGL.so.1 => /usr/lib64/nvidia/libGL.so.1 
        libGLU.so.1 => /usr/lib64/libGLU.so.1 
        libGLEW.so.1.11 => not found
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 
        libm.so.6 => /lib64/libm.so.6
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 
        libc.so.6 => /lib64/libc.so.6 
        libXext.so.6 => /usr/lib64/libXext.so.6 
        libX11.so.6 => /usr/lib64/libX11.so.6
        libXxf86vm.so.1 => /usr/lib64/libXxf86vm.so.1 
        libXi.so.6 => /usr/lib64/libXi.so.6 
        libnvidia-tls.so.340.29 => /usr/lib64/nvidia/tls/libnvidia-tls.so.340.29 
        libnvidia-glcore.so.340.29 => /usr/lib64/nvidia/libnvidia-glcore.so.340.29 
        libdl.so.2 => /lib64/libdl.so.2 
        /lib64/ld-linux-x86-64.so.2
        libxcb.so.1 => /usr/lib64/libxcb.so.1 
        libXau.so.6 => /usr/lib64/libXau.so.6 

ls -al / home / mks / myGL / oglpg / lib:

drwxr-xr-x.  .
drwxr-xr-x.  ..
-rw-r--r--.  freeglut_static.lib
-rw-r--r--.  freeglut_static_vs2010_d.lib
-rw-r--r--.  freeglut_static_vs2010.lib
-rw-r--r--.  gl3w.c
-rw-r--r--.  glew_static_d.lib
-rw-r--r--.  glew_static_vs2010_d.lib
-rw-r--r--.  glew_static_vs2010.lib
-rw-r--r--.  libfreeglut.a
-rw-r--r--.  libglew32.a
-rw-r--r--.  libGLEW.a
lrwxrwxrwx.  libGLEW.so -> libGLEW.so.1.11.0
lrwxrwxrwx.  libGLEW.so.1.11 -> libGLEW.so.1.11.0
-rw-r--r--.  libGLEW.so.1.11.0
-rw-r--r--.  LoadShaders.cpp
-rw-r--r--.  targa.cpp
-rw-r--r--.  vbm.cpp
-rw-r--r--.  vermilion32_d.lib
-rw-r--r--.  vermilion32.lib
-rw-r--r--.  vermilion64_d.lib
-rw-r--r--.  vermilion64.lib

echo $ PATH:

/usr/local/cuda-6.0/bin:/home/mks/bin:/usr/local/cuda-6.0/bin:/usr/lib64/:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
    
por George 03.11.2014 / 14:27

2 respostas

4

Você precisa instruir seu sistema onde encontrar bibliotecas dinâmicas. Os diretórios do sistema, como /usr/lib , estão no caminho de pesquisa padrão das bibliotecas dinâmicas, mas se você quiser adicionar diretórios personalizados, será necessário declará-los, listando-os na variável de ambiente LD_LIBRARY_PATH . Esta é uma lista de diretórios separados por dois pontos, como PATH .

export LD_LIBRARY_PATH=/home/mks/myGL/oglpg/lib

Coloque esta linha no seu ~/.profile ou onde quer que você defina variáveis de ambiente. Você também pode executá-lo em um shell e ele será aplicado a todos os programas iniciados a partir desse shell.

Como alternativa, ao criar um programa usando a biblioteca, registre sua localização no sistema.

g++ -Wl,-rpath,/home/mks/myGL/oglpg/lib … -L /home/mks/myGL/oglpg/lib -lGLEW

O capítulo sobre bibliotecas compartilhadas no Program Library Howto pode ser de ajuda adicional .

    
por 04.11.2014 / 00:53
1

Atualizar

Apenas notei o comentário do superusuário. Você ainda pode tentar o comando link sem ser root. Há a chance de que as permissões para essa pasta ainda permitam. Se falhar, você precisará entrar em contato com seu SysAdmin para obter ajuda.

Onde o aplicativo está procurando pela biblioteca, o link simbólico não existe.

Tente isso (enquanto raiz):

ln -sf /home/mks/myGL/oglpg/lib/libGLEW.so.1.11.0 /usr/lib64/libGLEW.so.1.11

Depois disso, execute ldd ./triangle novamente e veja se a saída encontra o symlink. Se não olhar para os locais, está procurando os outros links simbólicos e criar um link lá. Se a localização não for /usr/lib64 , certifique-se de que você unlink /usr/lib64/libGLEW.so.1.11 corrige os locais de links simbólicos para não deixar um link simbólico não utilizado no seu sistema de arquivos e esquecer de limpá-lo depois.

ln = > Criar link

sf = > link simbólico, forçado

    
por 03.11.2014 / 15:08