知识点

相关文章

更多

最近更新

更多

C程序访问Hadoop出现的各种编译错误和运行时各种类DefFound异常的解决方法

2019-03-28 13:01|来源: 网络

C程序访问Hadoop出现的各种编译错误和运行时各种类DefFound异常的解决方法:

当C程序编译但一到运行就告诉你缺configuration,  logging等类,反正遇到缺类的情况就网CLASSPATH中加×。jar的路径吧;
 
注意 CLASSPATH是在文件里搜索类;(没有递归搜索)
 
而PATH是在文件里搜索文件(递归式搜索)
 
编译时出现各种hdfs.h找不到:
 
当我像下面写makefile文件就没问题了:

HADOOP_INSTALL=/usr/local/hadoop
JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-i386
PLATFORM=Linux-i386-32
CPPFLAGS= -I$(HADOOP_INSTALL)/src/c++/libhdfs
LIB = -L$(HADOOP_INSTALL)/c++/Linux-i386-32/lib
LIB += -I${JAVA_HOME}/include
libjvm=${JAVA_HOME}/jre/lib/i386/client/libjvm.so
LDFLAGS += -lhdfs

test: test.c
 gcc $?  $(CPPFLAGS) $(LIB) $(LDFLAGS) $(libjvm) -o $@

clean:
 rm test

在运行时各种类或库so文件找不到

./test: error while loading shared libraries: ***.so.0:cannot open shared object file: No such file or directory
解决方法:把xxx.so.0所在的目录添加到/etc/ld.so.conf中,然后/sbin/ldconfig –v下就可以了。

我的~/.bashrc添加配置的环境变量:
 
就正常了:
 
另外可参考:http://www.linuxidc.com/Linux/2013-05/85169.htm

export HADOOP_INSTALL=/usr/local/hadoop
 export HADOOP_JARDIR=${HADOOP_INSTALL}/jardir
 export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$HADOOP_JA    RDIR/hadoop-core-1.0.4.jar:$HADOOP_JARDIR/hadoop-tools-1.0.4.jar:$HADOOP_JAR    DIR/commons-configuration-1.6.jar:$HADOOP_JARDIR/commons-logging-1.1.1.jar:$    HADOOP_JARDIR/commons-logging-api-1.0.4.jar:$HADOOP_JARDIR/log4j-1.2.15.jar:    $HADOOP_JARDIR/commons-lang-2.4.jar

1.如果要删除某个变量可用:

unset 变量名

2.当要修改:

 set 变量名

3.当要临时添加一个变量:

 export 变量名=

4.当要永久,则改配置文件吧;

/etc/profile

~/.bashrc

在里面添加:

export 变量名=

更多Hadoop相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

相关问答

更多
  • 有可能是因为程序错误(大多数原因) 因为编程有可能混乱 不是每个程序都是如此完美的 2 可能CPU的运行率太高 处理能力下降或者 停滞 这也会影响程序的关闭( svchost 这个文件是系统文件之一 不能轻易关闭 强行关闭会造成系统瘫痪 Explorer 这个文件则是桌面运行文件 强行关闭会造成桌面瘫痪 有优秀的系统会过不久回复 但是也有不恢复的例子)推荐下面的解决方法 3 是系统本身就有这样那样的问题 (曾经重装过其他系统就排除障碍) 4 这个使程序运行违法 是典型的系统文件问题啦 5 这个应该和杀软关系 ...
  • javax.swing.JFrame.setLayout() 用 javax.swing.MyFrame.getContentPane().setLayout() 替换
  • insert into sheet1$(表头字段1,表头字段2) VALUES (1,2)
  • 当然,构建foo 重载版本: foo(String obj) foo(Integer obj) 并删除一般的。 如果必须,请那些调用通用( private ) _foo(Object obj) 。 Sure, build overloaded versions of foo: foo(String obj) foo(Integer obj) and remove the general one. Have those call a general (private) _foo(Object obj) if ...
  • 当您缺少参考时会导致这种情况。 查看抛出错误的计算机上的工具>引用。 您应该看到某些引用以MISSING为前缀。 这些库需要安装在其他机器上以便使用它们,或者,如果它们具有您正在使用的早期版本的引用,则可以尝试延迟绑定。 如果上述方法无效,我在机器上安装失败时遇到此问题。 没有任何引用丢失,但在打开Excel时(通常不相关的)应用程序卡在一个失败的安装循环中。 如果发生这种情况,您需要纠正失败的安装。 This is caused when you have a missing reference. Hav ...
  • 仅在运行时变量a将被赋值为0 ,因此除法将因DivideByZero异常而失败。 尝试这样做int div2 = 10 / 0; 并且会看到编译器在现场抛出一个红色的波浪形错误。 如果将int a声明为constant如下所示也是同样的情况 constant int a = 0; int div2 = 10 / a; 那是因为,在编译时; 编译器只会在引用它的地方替换常量值,这与将其直接除以0 。 所以下面这一行 int div2 = 10 / a; 会变成 int div2 = 10 / 0; C ...
  • 在我看来,你的代码试图引用你的表单上的控件,但是以无效的方式(我不能完全理解代码试图做什么,因为我没有阅读语言,我不知道知道你在表格上有什么控制权。 例如,要获取表单上组合框的值,通常会键入类似Me.cboMyCombo.Value 。 要获取绑定到此表单的字段的值,您可以键入类似Me!MyField或Me![My Field].Value 。 你对[schede]![S_Stampa_Ordini].[ordinamento]调用[schede]![S_Stampa_Ordini].[ordinament ...
  • 编译时错误 - 由于语法错误,java编译器无法编译代码。 典型候选人: 丢失括号 缺少分号 访问其他课程中的私人领域 类路径中缺少类(在编译时) 运行时错误 - 代码没有编译,可以执行但在某个时刻崩溃 ,就像你有一个零除。 使用实际为null变量(可能导致NullPointerException) 在数组中使用非法索引 访问当前不可用的资源(缺少文件...) 缺少类路径上的类(在运行时) ('崩溃'实际上不是正确的术语,仅用于说明会发生什么) Compile time error - the java c ...
  • 错误消息意味着编译器在尝试构建程序时发生崩溃。 这很可能意味着您的Cygwin安装已损坏,或者碰巧包含gcc的破碎版本。 尝试更新到当前版本的Cygwin。 鉴于Cygwin 1.7和GCC 4的第一个稳定版本都是最近发生的事情,这是双倍的情况。 如果您仍然使用Cygwin 1.5或GCC 3.x,我认为升级可以解决您的症状。 The error message means the compiler crashed while trying to build your program. Most likel ...
  • 您需要使用未经检查的强制转换的通用辅助方法: private static & Marshallable> void fooHelper(Class type) { if (type.isEnum()) { //This is safe because of the isEnum check, and we don't return any //type with T (impor ...