cannot resolve symbol_cannot restore segment prot after reloc: Permission denied

更新时间:2017-10-07    来源:linux    手机版     字体:

【www.bbyears.com--linux】

最近把一个java项目从windows平台部署到linux下,安装测试时遇见了cannot restore segment prot after reloc: Permission denied 这个问题。

最近用到gearman。由于C语言的server一直编译不过去(貌似是boost的问题)。所以想到用java版本的server。但是没想到又遇到了一些问题。

首先运行命令:

 代码如下 java -jar java-gearman-service-0.5.jar

结果出现如下提示:

java/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
java/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


然后到网上找了一下问题,发现是SELinux的问题,那么就得解决它了。

方法一:

找到/etc/sysconfig/selinux,编辑SELINUX属性默认为(SELINUX=enforcing)改成SELINUX=disabled。如果已经是disabled就不用改了,也可以注释SELINUX=enforcing,新添加一行SELINUX=disabled。保存退出。然后继续调试,如果还是出现这样的问题就用方法二。

方法二:

 代码如下 chcon -t texrel_shlib_t
如: chcon -t texrel_shlib_t /路径/名字.so


方法三:

解决问题的步骤如下:

首先编辑配置文件:/etc/selinux/config

找到如下内容:

 代码如下

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
# SELINUX=enforcing
将# SELINUX=enforcing的注释去掉,并在下边增加这样一行:SELINUX=disabled

保存退出,结果还是报相同的错误。然后运行如下命令:

 代码如下

chcon -t texrel_shlib_t /usr/local/jdk1.7.0_01/jre/lib/i386/server/libjvm.so

注意,错误提示中提示哪个文件出错就在后边写上哪个文件。

我自己的问题是

修改/etc/profile文件最后一行加入

JAVA_HOME=jdk路径

CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

export PATH JAVA_HOME CLASSPATH

解决的办法是在root用户下,修改/etc/selinux/config 文件,

 代码如下

把SELINUX=enforcing 改成 SELINUX=disabled。 


然后,保存关闭,重启机器就可以了。

 

加上这个就能解决这个问题了,我先用方法一结果不奏效然后再GG搜索了下,在SELinux被disable的情况下然后执行这个命令,肯定能解决这个问题。

 

本文来源:http://www.bbyears.com/caozuoxitong/36128.html