2016-11-09 1 views
2

je devais mettre à jour certains paquets Anaconda/Python sur mon Linux (Ubuntu 15.10), et par conséquent je reçois maintenant le message d'erreur suivant que je ne l'ai jamais vu auparavant:OSError avec libnetcdf-Fortran: symbole non défini

OSError: /usr/lib/x86_64-linux-gnu/libnetcdff.so.6: undefined symbol:nc_rename_grp 

L'erreur se produit lors de l'appel d'un programme Fortran dans un script Python. En exécutant le même programme sans Python cependant, tout fonctionne parfaitement bien ...

J'ai également re-compilé le programme après les mises à jour, mais rien n'a changé.

Quelqu'un a-t-il une idée de ce qui se passe ici?

+0

Je pense qu'anaconda fournit sa propre version de la bibliothèque netcdf quelque part dans sa structure de répertoires. Peut-être travaillez-vous avec un objet lié dynamiquement qui, lorsqu'il est exécuté depuis anaconda, utilise la version anaconda lib (qui peut avoir des symboles supplémentaires) mais votre "LD_LIBRARY_PATH' ou similaire signifie qu'il récupère la version du système (ou vice versa) . Pourriez-vous élaborer un peu sur ce qu'est le programme "fortran based" et comment vous l'exécutez, c'est-à-dire utilisez-vous simplement un appel système en python pour exécuter un exécutable? Si oui, pouvez-vous faire 'ldd myExecutable' à partir de python et de l'extérieur de python. –

+0

En anglais britannique, programme se réfère aux programmes d'ordinateur et à leur programmation, et le programme est utilisé pour tous les autres sens du mot. –

Répondre

0

Le symbole nc_rename_grp est défini dans libnetcdf.so. Si vous exécutez le code FORTRAN utilisant subprocess alors vous devrez déclarer env comme suit:

env["LD_LIBRARY_PATH"] = "/usr/lib/x86_64-linux-gnu" 
h = subprocess.Popen(cmd,env=env) 
0

Merci à tous pour votre aide. Le problème a été causé par un mauvais chemin d'accès aux bibliothèques netcdf dans ./bashrc et par conséquent le programme (c'est-à-dire un programme/modèle informatique) ne fonctionnait pas correctement. Tout est maintenant résolu et le programme/modèle est opérationnel!