2015-10-17 78 views
0

我最近尝试了Java的了openmpi库的结合:的openmpi + java中,找不到或无法加载主类

我已成功编译的lib使用以下配置:

$/configure --prefix "/home/yuechuan/Application/.openmpi" --enable-mpi-java --with-jdk-dir="/usr/lib/jvm/java-8-oracle/" --with-jdk-header="/usr/lib/jvm/java-8-oracle/include/" 

$sudo make install 

我我能够编译一个简单的Java程序有:$mpijavac src/com/cyc115/pa2/Main.java

目前 $echo $CLASSPATH

/home/yuechuan/Github/parallel_pa2/src/com/cyc115/pa2/

但是,我无法运行类文件。以下是一些备选到目前为止,我曾尝试:

$java -Djava.library.path=/home/yuechuan/Application/.openmpi/lib/mpi.jar -cp .:/home/yuechuan/Application/.openmpi/lib/mpi.jar Main 

返回Error: Could not find or load main class Main错误。

的单纯和简单$java Main命令返回NoClassDefFoundError

Error: A JNI error has occurred, please check your installation and try again 
Exception in thread "main" java.lang.NoClassDefFoundError: mpi/MPIException 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048) 
    at java.lang.Class.getMethod0(Class.java:3018) 
    at java.lang.Class.getMethod(Class.java:1784) 
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526) 
Caused by: java.lang.ClassNotFoundException: mpi.MPIException 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 7 more 

这里的java文件,如果有人需要:

package com.cyc115.pa2; 

import mpi.MPI; 
import mpi.MPIException; 

public class Main { 

    public static void main(String args[]) throws MPIException 
    { 
     MPI.Init(args); 

     int rank = MPI.COMM_WORLD.getRank(); 
     int size = MPI.COMM_WORLD.getSize(); 

     System.out.print("hello world"); 
     MPI.Finalize(); 
    } 
} 

我如何能得到任何想法的.class运行?

回答

1

由于包是:

package com.cyc115.pa2; 

你需要把文件Main.java名为com/cyc115/pa2 子目录中的Java库路径应该是包含libmpi_java.so而非路径的目录路径到mpi.jar。

编译:

javac -cp /home/yuechuan/Application/.openmpi/lib/mpi.jar com/cyc115/pa2/Main.java 

运行:

java -Djava.library.path=/home/yuechuan/Application/.openmpi/lib/ -cp .:/home/yuechuan/Application/.openmpi/lib/mpi.jar com.cyc115.pa2.Main 

下是没有问题的,只是一个供参考:

应该--with-jdk-headers以S而非然而--with-jdk-header如果您已指定--with-jdk-dir,则不必指定它。

+0

谢谢:)它的工作原理! – cyc115

+0

并注意这正确地具有java.library.path作为目录,而不是问题所做的jar文件。 –

相关问题