我有一个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的内容是否安装在数据节点上的相应目录中)。
知道如何解决这个问题吗?
答案 0 :(得分:0)
静态编译您的C ++程序。基本上是:
g++ -o <progra> -static <object-files>
这将产生一个没有依赖关系的二进制文件。它会很笨重(在它上面运行strip
!)但是如果它连续运行你应该没有问题。