编译c++源代码为.dll文件
Compile C++ source to a .dll
我试图用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编译,它工作了。
相关文章:
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 将 dll 文件注入 UWP
- 从 .lib 文件创建一个.dll文件
- 使用dll源代码C++调试dll文件
- 如何将我的程序转换为.dll文件并使用rundll32.exe在cmd中运行它?
- 提升 Python 找不到 dll 文件
- 为什么它无法在 c++ 中全局声明一个构建为 dll 文件的类?
- 尝试在 python 中正确加载和使用 dll 文件
- 如何在运行时从 c++ 中的 DLL 文件创建对象?
- 是否可以单步执行.dll文件中定义的成员函数?
- 是否有其他方法将.dll文件从一个项目复制到我的启动项目中的可执行文件旁边
- 设置所需DLL文件的自定义路径:电子应用
- LUA5.3 DLL文件中缺少名称
- 如何在 go 中调用带有 .lib 和.dll文件的预构建 API
- 将字符串从 C# 发送到 dll 文件C++
- DLL文件中函数的预期行为在C中编写并从CPP文件打电话
- 如何在VS项目中静态链接没有dll文件的cpprest?
- 加载C DLL文件时,如何修复异常_access_violation
- 编译时如何隐藏DLL文件中的字符串?
- 找不到 C# C++ DLL 文件