2011-04-18 2 views
0

J'ai une bibliothèque tierce que j'essaie d'incorporer dans une simulation. Nous avons la bibliothèque statique (.a), avec toutes ses dépendances d'exécution (objets partagés). J'ai créé une application très simple (en C) qui est liée à la bibliothèque. Tout ce qu'il fait est appeler une fonction d'initialisation qui fait partie de l'API de la bibliothèque tierce, et se termine. Quand je lance ceci directement à partir de la ligne de commande, cela fonctionne très bien. Si je soumets l'exécutable à notre grille Condor, il échoue avec une erreur seg sur strncpy (libc.so.6). J'ai forcé Condor à seulement exécuter l'exécutable sur une machine particulière, et si je l'exécute directement sur cette machine, cela fonctionne très bien. Je suis surtout un programmeur Java ... une quantité limitée d'expérience de codage natif. Je suis familier avec des outils tels que nm, ldd, catchsegv, etc ... au point où je peux les exécuter. Je ne sais pas vraiment où commencer à chercher un problème.Pourquoi un programme natif s'exécute-t-il correctement lorsqu'il est exécuté directement, mais échoue avec une erreur de segment lorsqu'il est soumis par condor?

J'ai lancé ldd directement sur l'ordinateur en cours d'exécution, et via un script soumis par condor, avec mon exécutable. ldd signale les mêmes fichiers dans les deux cas.

Je ne comprends pas comment l'exécuter directement fonctionnerait, mais cela ne fonctionnerait pas avec Condor. Le processus qui exécute finalement le programme, condor_startd, est un processus qui démarre en tant que root et change son uid effectif en émetteur. Peut-être que cela a quelque chose à voir avec ça?

Répondre

0

Je ne sais pas pourquoi cela causerait un problème, mais le coupable était la variable d'environnement LANG. Il n'a pas été défini lors de l'exécution sous Condor, mais a été défini sur US_EN.UTF-8 lors de l'exécution locale. L'ajout de cette valeur à l'environnement d'exécution Condor a résolu le problème.

Questions connexes