JNA示例程序java.lang.NoClassDefFoundError
我可以编译这个JNA示例代码(来自的步骤2): 我在MacOSX和Linux上得到了完全相同的异常 如何运行它?这个示例(以及绝大多数java类)使用包:JNA示例程序java.lang.NoClassDefFoundError,java,jna,noclassdeffounderror,Java,Jna,Noclassdeffounderror,我可以编译这个JNA示例代码(来自的步骤2): 我在MacOSX和Linux上得到了完全相同的异常 如何运行它?这个示例(以及绝大多数java类)使用包: package com.sun.jna.examples; 为了正确编译/运行它,您需要从“root”文件夹(例如,“com”所在的文件夹)运行javac/java: 假设您有一个名为examples的文件夹。您需要将jna.jar和源代码都放在其中保存文件夹结构: /examples jna.jar /com /sun
package com.sun.jna.examples;
为了正确编译/运行它,您需要从“root”文件夹(例如,“com”所在的文件夹)运行javac/java:
假设您有一个名为examples
的文件夹。您需要将jna.jar
和源代码都放在其中保存文件夹结构:
/examples
jna.jar
/com
/sun
/jna
/examples
HelloWorld.java
您可以使用以下命令编译和运行:
javac -classpath .:jna.jar -g com/sun/jna/examples/HelloWorld.java
java -classpath .:jna.jar com.sun.jna.examples.HelloWorld
注意前一种情况下的路径分隔符和后一种情况下的点。或者删除这一行并重新编译(在这种情况下,这很好,因为您只需尝试一些示例) 或者阅读java中的包是什么以及如何处理它们(ChssPly76s作为初学者发布)
最好选择第二个选项,因为迟早(可能更早)您将不得不处理软件包。所以现在就花点时间来阅读它。在Eclipse中,在
Java构建路径>顺序和导出
下,选择export jna.jar在编译时,您还希望包含-d。标记,以确保它清除包上的目录结构。否则类文件将只在当前目录中。Rob,在编译时不会添加“-d.”将类文件放在当前目录中。它似乎默认将其与.java源文件放在一起。为什么我不想这样做?@Rob-“-d”标志确实指定了目标文件夹,但它与“基于包吹出目录结构”无关。后者总是如此。@Daryl-你可能不想在真正的项目中这样做;将您的源代码与构建工件分开是一个好主意,原因有很多(比如使将源代码签入VCS变得更容易)。不过,出于您的目的(运行一个示例),它完全没有问题。我尝试删除类文件并使用javac-classpath.:jna.jar-g-d进行编译。com/sun/jna/examples/HelloWorld.java
,但是“HelloWorld.class”和“HelloWorld$CLibrary.class”仍然是在com/sun/jna/examples/(使用HelloWorld.java)中创建的。
/examples
jna.jar
/com
/sun
/jna
/examples
HelloWorld.java
javac -classpath .:jna.jar -g com/sun/jna/examples/HelloWorld.java
java -classpath .:jna.jar com.sun.jna.examples.HelloWorld
package com.sun.jna.examples;