2017-07-15 13 views
1

J'ai construit GLEW (en utilisant make install) pour l'utiliser dans un petit programme de test que j'écris (la source peut être trouvée here si vous en avez besoin). Je courus locate libGLEW.so juste pour vérifier si les bibliothèques Glew ont été correctement installés, et a obtenu le résultat suivant:Le programme C++ ne lie pas correctement au fichier .so

/usr/lib64/libGLEW.so 
/usr/lib64/libGLEW.so.2.0 
/usr/lib64/libGLEW.so.2.0.0 

C'était tout à fait normal. Je l'ai ensuite compilé en utilisant la commande:

g++ main.cpp -o main -lglfw -lGLEW -lGL -lX11 -lpthread -lXi -g 

Cela n'a pas non plus entraîné d'erreurs. Cependant, quand j'ai essayé d'exécuter le programme:

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

Juste pour un contrôle de santé mentale, je courais ldd main | grep "GLEW", et bien sûr:

libGLEW.so.2.0 => not found 

Je pensais d'abord que cela pourrait être un problème avec l'éditeur de liens ne recherche pas le répertoire contenant les bibliothèques. Alors j'ai couru la commande ld --verbose | grep "/usr/lib64" et il était un SEARCH_DIR contenant le répertoire requis:

... SEARCH_DIR("=/usr/lib64"); ... 

Cela était particulièrement déroutant. J'ai essayé de compiler avec l'option -L/usr/lib64, mais le même message d'erreur persistait toujours. J'ai vérifié que les liens symboliques à la bibliothèque étaient corrects et ils étaient:

lrwxrwxrwx 1 root root 16 Jul 15 10:22 libGLEW.so -> libGLEW.so.2.0.0 
lrwxrwxrwx 1 root root 16 Jul 15 10:38 libGLEW.so.2.0 -> libGLEW.so.2.0.0 
-rw-r--r-- 1 root root 707K Jul 15 10:22 libGLEW.so.2.0.0 

Je ne sais pas ce qui cause exactement le problème, mais je commence à croire que je ne l'ai pas installé correctement les bibliothèques. J'ai l'impression que la réponse est juste devant mes yeux mais je ne peux pas la trouver.

Merci d'avance pour toute aide.

+0

Que signifie 'uname -a'? –

+0

@JohnHinrichsen Linux TRASHTOPB 4.8.0-58-générique # 63 ~ 16.04.1-Ubuntu SMP lun. 26 juin 18:08:51 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux – WickedJet

Répondre

0

Compile avec -Wl,-rpath=/usr/lib64

+0

Selon g ++ aucune de ces options de ligne de commande n'est valide. – WickedJet

+0

C'est un drapeau unique: https://stackoverflow.com/questions/6562403/i-dont-understand-wl-rpath-wl – JRG

0

Debian et Ubuntu ne pas installer les bibliothèques système dans /usr/lib64 et les instructions d'installation que vous avez utilisés sont mauvais pour ces systèmes. (Ce n'est pas une bonne idée d'installer des bibliothèques en contournant le système d'empaquetage dans /usr de toute façon.) /usr/local/lib est recherché par défaut (contrairement à d'autres systèmes), donc vous pouvez déplacer les bibliothèques vers ce répertoire.

+0

J'ai essayé, mais le programme n'est toujours pas lié correctement à libGLEW.so. 2.0. Je peux essayer ceci sur un système différent pour vérifier si c'est un problème avec mon ordinateur. – WickedJet

+0

Quel est le nouveau message d'erreur? –

+0

Comme avant, quand je cours'ldd main' il n'est pas lié correctement à libGLEW.so.2.0 – WickedJet