Компилировать исходный код C ++ в .dll - PullRequest
2 голосов
/ 22 сентября 2011

Я пытаюсь создать простой пример с 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 из исходного файла, я использую эту команду для запуска gcc на cygwin (нашел эту команду здесь - 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

Я знаю, что это длинный пост, но любая помощь была бы потрясающей.

Спасибо

1 Ответ

2 голосов
/ 22 сентября 2011

Я использую следующие флаги для компиляции:

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

Однако я должен упомянуть, что я не смог запустить свое приложение JNI, если dll была скомпилирована с помощью cygwin gcc.Я скомпилировал с Visual Studio, и это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...