cannot restore segment prot after reloc错误的解决方法
最近用到gearman。由于C语言的server一直编译不过去(貌似是boost的问题)。所以想到用java版本的server。但是没想到又遇到了一些问题。
首先运行命令:java -jar java-gearman-service-0.5.jar
结果出现如下提示:
java/nio/channels/CompletionHandlerjava-gearman-service-0.5usage:java [jvm options] -jar java-gearman-service-0.5.jar [server options]Options:-p PORT ? --port=PORT ? ? Defines what port number the server will listen on (Default: 4730)-l LEVEL ?--logger=LEVEL ?Specifies the logging level (Default: 0)-v ? ? ? ?--version ? ? ? Display the version of java gearman service and exit-? ? ? ? ?--help ? ? ? ? ?Print this help menu and exitjava/nio/channels/CompletionHandler
java-gearman-service-0.5
usage:java [jvm options] -jar java-gearman-service-0.5.jar [server options]
Options:? ?-p PORT ? --port=PORT ? ? Defines what port number the server will listen on (Default: 4730)? ?-l LEVEL ?--logger=LEVEL ?Specifies the logging level (Default: 0)? ?-v ? ? ? ?--version ? ? ? Display the version of java gearman service and exit? ?-? ? ? ? ?--help ? ? ? ? ?Print this help menu and exit
费了好大劲才意识到这个问题出在哪儿。这还是在我将这个包导入到eclipse的时候发现的,发现源码里竟然有错误,这怎么可能的。经查找,发现是由于jdk版本的问题。我本地机器上装的是jdk1.6(对应的java6),而gearman的server需要jdk1.7(对应java7)才能运行。于是立即下载新版本的java运行。结果这次倒是不会出现这个问题了,但是新的问题出现了。这次报的错误是:
?
/usr/local/jdk1.7.0_01/bin/java -jar java-gearman-service-0.5.jar
Error: dl failure on line 875
Error: failed /usr/local/jdk1.7.0_01/jre/lib/i386/server/libjvm.so, because /usr/local/jdk1.7.0_01/jre/lib/i386/server/libjvm.so: cannot restore segment prot after reloc: Permission denied
?
?
经网上搜索,得到是因为SELINUX的问题。有兴趣的可以去网上查一下这个。解决问题的步骤如下:
首先编辑配置文件:/etc/selinux/config
找到如下内容:
# This file controls the state of SELinux on the system.将# SELINUX=enforcing的注释去掉,并在下边增加这样一行:SELINUX=disabled
保存退出,结果还是报相同的错误。然后运行如下命令:
chcon -t texrel_shlib_t /usr/local/jdk1.7.0_01/jre/lib/i386/server/libjvm.so
注意,错误提示中提示哪个文件出错就在后边写上哪个文件。
结果终于可以正常运行了。但是在编译一个java的gearman的cllient的时候还是提示这个错误。于是运行如下命令:
/usr/sbin/setenforce 0