потоковая программа на С ++ и общие библиотеки - PullRequest
6 голосов
/ 27 января 2012

У меня есть программа на C ++, которую я пытаюсь запустить как потоковое задание на hadoop (в ней есть только мапперы, без редукторов). Пока простая программа на С ++ работает правильно. Другая программа на C ++, которая связывает множество общих библиотек, не работает с сеткой. ldd в этой программе на C ++ показывает следующее: (она использует множество сторонних библиотек, таких как opencv и boost_serialization)

/usr/local/lib/libboost_serialization.so.1.48.0 /usr/local/lib/libfftw3f.so.3   /usr/local/lib/libconfig++.so.9 /usr/local/lib/liblog4cpp.so.4   /usr/local/lib/libopencv_core.so.2.3 /usr/local/lib/libopencv_contrib.so.2.3

Я думаю, потому что эти общие библиотеки не установлены на узлах данных, его сбой. Я попытался поместить эти библиотеки в tarball и указал это для потоковой работы, используя опцию -archives (Distributed cache). Это также не сработало (я не уверен, что содержимое из tarball было установлено в соответствующую директорию на узлах данных).

Есть идеи, как это сделать?

1 Ответ

0 голосов
/ 07 апреля 2012

Статическая компиляция вашей программы на C ++.В основном:

g++ -o <progra> -static <object-files>

Это создаст двоичный файл, который не имеет зависимостей.Он будет громоздким (запустите strip на нем!), Но если он будет работать непрерывно, у вас не должно возникнуть проблем.

...