编译c++源代码为.dll文件

Compile C++ source to a .dll

本文关键字:dll 文件 源代码 c++ 编译      更新时间:2023-10-16

我试图用JNI创建一个简单的例子。我在编译。cpp源文件时遇到了麻烦。我将把我所做过/尝试过的所有步骤都写在下面。我正在尝试遵循这里找到的教程:http://java.sun.com/docs/books/jni/html/start.html#27008

我有一个Java程序叫做HelloJNI.java

public class HelloJNI
{
    private native void print();
    public static void main(String[] args)
    {   
        new HelloJNI().print();
    }
    static
    {
        System.loadLibrary("HelloJNI");
    }
}
从这里我编译了java文件并调用

javah -jni HelloJNI生成HelloJNI.h

从这里我创建.cpp源文件

#include <jni.h>
#include <iostream>
#include "HelloJNI.h"
using namespace std;
JNIEXPORT void JNICALL
Java_HelloJNI_print(JNIEnv *env, jobject obj)
{
  cout << "Hello JNI!" << endl;
  return;
}

现在我有了所有这些,我尝试从源文件创建.dll,我使用这个命令在cygwin上运行gcc(在这里找到这个命令- http://www.inonit.com/cygwin/jni/helloWorld/c.html):

gcc -mno-cygwin -I$JAVA_HOME/include -I$JAVA_HOME/include/win32 
    -Wl,--add-stdcall-alias -shared -o HelloJNI.dll HelloJNI.c

当我这样做时,我得到一个错误:

HelloJNI.cpp:1:17: fatal error: jni.h: No such file or directory
compilation terminated.

这就是我被卡住的地方,我真的不知道为什么编译器找不到jni.h,它在$JAVA_HOME/include目录中。

ls $JAVA_HOME/include结果:

classfile_constants.h  jdwpTransport.h  jvmti.h      win32
jawt.h                 jni.h            jvmticmlr.h

我知道这是一个很长的帖子,但任何帮助都会很棒。

谢谢

我使用以下标志进行编译:

JDK = "c:/Program Files/Java/jdk1.5.0_22/"
CFLAGS=-Wall -DGCC -DWINDOWS -I$(JDK)/include/win32 -I$(JDK)/include

然而,我应该提到,如果dll是用cygwin gcc编译的,我就不能运行我的JNI应用程序了。然后我用Visual Studio编译,它工作了。