Почему нативная программа работает нормально при прямом выполнении, но терпит неудачу с ошибкой seg при отправке через condor

У меня есть сторонняя библиотека, которую я пытаюсь включить в симуляцию. У нас есть статическая библиотека (.a) вместе со всеми ее зависимостями во время выполнения (общие объекты). Я создал очень простое приложение (на C), которое связано с библиотекой. Все, что он делает, это вызывает функцию инициализации, которая является частью API сторонней библиотеки, и завершает работу. Когда я запускаю это прямо из командной строки, все работает нормально. Если я отправлю исполняемый файл в нашу сетку Condor, он выйдет из строя из-за ошибки seg на strncpy (libc.so.6). Я заставил condor запускать исполняемый файл только на определенной машине, и если я запускаю его непосредственно на этой машине, он работает нормально.

В основном я программист на Java... ограниченный опыт написания собственного кода. Я знаком с такими инструментами, как nm, ldd, catchsegv и т. д., до такой степени, что могу их запускать. Я действительно не знаю, с чего начать поиск проблемы.

Я запускал ldd непосредственно на исполняемой машине и через скрипт, отправленный через condor, вместе с моим исполняемым файлом. ldd сообщает об одних и тех же файлах в обоих случаях.

Я не понимаю, как будет работать его прямой запуск, но он не будет запускаться кондором. Процесс, который в конечном итоге выполняет программу, condor_startd, — это процесс, который запускается как root и меняет свой эффективный uid на отправителя. Возможно, это как-то связано?


person Josh    schedule 18.04.2011    source источник


Ответы (1)


Не знаю, почему это могло вызвать проблему, но виновником была переменная среды LANG. Он не был установлен при работе в Condor, но был установлен в US_EN.UTF-8 при локальном запуске. Добавление этого значения в среду выполнения condor устранило проблему.

person Josh    schedule 20.04.2011