You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS 7下编译JSVC时JAVA_HOME路径配置冲突问题求助

CentOS 7下JSVC编译路径矛盾问题解决

问题背景

在CentOS 7上从commons-daemon-1.0.15-src.tar.gz源码包构建JSVC时,遇到以下矛盾:

  • JDK安装路径为/usr/java/jdk1.8.0_351-amd64,已正确设置$JAVA_HOME环境变量
  • 执行./configure时,即使指定--with-java=/usr/java/jdk1.8.0_351-amd64也无法通过检测,必须添加/include后缀才能完成configure,命令如下:
    sudo ./configure --with-java=/usr/java/jdk1.8.0_351-amd64/include --with-os-type=linux
    
  • 但执行make时,gcc命令会出现重复路径/usr/java/jdk1.8.0_351-amd64/include/include,导致找不到jni.h文件,报错信息:
    sudo make -I /usr/java/jdk1.8.0_351-amd64(cd native; make  all)
    make[1]: Entering directory `/opt/install/commons-daemon-1.0.15-src/src/native/unix/native'
    gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"amd64\" -Wall -Wstrict-prototypes   -I/usr/java/jdk1.8.0_351-amd64/include/include -I/usr/java/jdk1.8.0_351-amd64/include/include/linux -c java.c -o java.o
    java.c:24:17: fatal error: jni.h: No such file or directory
    

解决方案

方案1:修改configure脚本修复路径拼接逻辑

  1. 进入JSVC源码的unix目录:
    cd /opt/install/commons-daemon-1.0.15-src/src/native/unix
    
  2. 编辑configure脚本,搜索与--with-java相关的路径处理代码,找到类似JAVA_INCLUDE="$with_java/include"的行,修改为:
    if echo "$with_java" | grep -q "/include$"; then
        JAVA_INCLUDE="$with_java"
    else
        JAVA_INCLUDE="$with_java/include"
    fi
    
  3. 保存脚本后,直接使用JDK根路径执行configure:
    sudo ./configure --with-java=/usr/java/jdk1.8.0_351-amd64 --with-os-type=linux
    
  4. 正常执行make完成编译。

方案2:通过软链接临时规避路径重复

  1. 创建临时目录并建立软链接,模拟一个不会触发重复拼接的路径结构:
    mkdir -p /tmp/java-temp
    ln -s /usr/java/jdk1.8.0_351-amd64/include /tmp/java-temp/include
    
  2. 使用临时路径执行configure:
    sudo ./configure --with-java=/tmp/java-temp --with-os-type=linux
    
  3. 执行make完成编译后,删除临时目录:
    rm -rf /tmp/java-temp
    

方案3:手动修正Makefile中的错误路径

  1. 先执行能通过的configure命令:
    sudo ./configure --with-java=/usr/java/jdk1.8.0_351-amd64/include --with-os-type=linux
    
  2. 进入native目录编辑Makefile:
    cd native
    vi Makefile
    
  3. 找到所有包含-I/usr/java/jdk1.8.0_351-amd64/include/include的行,将重复的/include删除,修正为:
    -I/usr/java/jdk1.8.0_351-amd64/include -I/usr/java/jdk1.8.0_351-amd64/include/linux
    
  4. 保存后执行make即可完成编译。

方案4:升级JSVC版本

commons-daemon 1.0.15版本的configure脚本存在路径识别bug,建议使用更新版本的源码包(如1.3.0及以上),新版本脚本可正确识别$JAVA_HOME或--with-java指定的JDK根路径,无需额外调整。

内容的提问来源于stack exchange,提问作者Eljah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:16:07