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?