流式c ++程序和共享库

时间:2012-01-27 15:36:33

标签: c++ hadoop mapreduce

我有一个C ++程序,我试图在hadoop上作为流媒体作业运行(它只有映射器,没有减速器)。虽然简单的C ++程序可以正常工作。与许多共享库链接的另一个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选项(分布式缓存)将其指定为流作业。这也不起作用(我不确定来自tarball的内容是否安装在数据节点上的相应目录中)。

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

静态编译您的C ++程序。基本上是:

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

这将产生一个没有依赖关系的二进制文件。它会很笨重(在它上面运行strip!)但是如果它连续运行你应该没有问题。