2015-11-06 80 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或更明顯的方法,大部分自動檢測都會使用「可能」位置列表作爲最後的手段。 –

相關問題