2015-11-06 72 views

回答

0
#include <stdio.h> 
#include <stdlib.h> 
#include <ftw.h> 
#include <string.h> 

static char* jvm_lib_fpath; 

static int check_file(const char *fpath, const struct stat *sb, int typeflag) { 
    static const char LINUX_LIB[] = "libjvm.so"; 
    static const char WINDOWS_LIB[] = "jvm.dll"; 
    const char *libs[] = {LINUX_LIB, WINDOWS_LIB}; 
    int i; 

    for (i = 0; i < 2; i++) { 
     const char* lib = libs[i]; 
     const size_t m = strlen(lib); 

     const size_t n = strlen(fpath) - m; 

     const char* test = &fpath[n]; 

     if (strcmp(test, lib) == 0) { 
      const size_t fpath_len = strlen(fpath) + 1; 
      jvm_lib_fpath = (char*) malloc(fpath_len * sizeof(char)); 
      if (jvm_lib_fpath == NULL) return -1; 
      strcpy(jvm_lib_fpath, fpath); 

      return 1; 
     } 
    } 

    return 0; 
} 

static int set_jvm_lib_fpath() { 
    char* java_home = getenv("JAVA_HOME"); 

    int result = ftw(java_home, check_file, 128); 

    return result; 
} 

int main() { 
    int result = set_jvm_lib_fpath(); 
    if (result == 1) { 
     printf("jvm_lib_fpath: '%s'\n", jvm_lib_fpath); 
    } else { 
     printf("Could not find JVM library file.\n"); 
    } 
    if (jvm_lib_fpath) { 
     free(jvm_lib_fpath); 
    } 

    return 0; 
} 
+1

虽然这是一个非常好的开始,但请记住,有些平台已将Java正确集成到系统中,以便不需要将JAVA_HOME设置为正确执行java,加载它的库。为了找到它,即使知道'java'的路径也可能是开始的一步,因为有'alternatives'系统。如果没有JAVA_HOME或更明显的方法,大部分自动检测都会使用“可能”位置列表作为最后的手段。 –

相关问题