编译dll的问题

newman0708 2003-03-23 02:24:21
下面的编译语句使用 Microsoft Visual C++ 编译器:
cl -Ic:\jdk1.1.6\include -Ic:\jdk1.1.6\include\win32 -LD MyNative.c
-FeMyNative.dll

各位,能不能解释一下?(各个部分)

如果我没有vc++,我装了Dev-C++,我该怎么办?
...全文
165 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
newman0708 2003-04-01
  • 打赏
  • 举报
回复
我已经给分了,它怎么不显示。

xbin999(xbin)<---70

newman0708 2003-04-01
  • 打赏
  • 举报
回复
//编成动态文件MyNativeDll.dll
public class MyNative{
static{
System.loadLibrary( "MyNativeDll" );
}
private native void showParmsJni( String s, int i, boolean b );
public void showParms( String s, int i, boolean b ){
showParmsJni( s, i , b );
}
}
//测试程序
import java.awt.event.*;
public class JniTest{
public static void main( String[] args )throws Exception{
MyNative obj = new MyNative();
obj.showParms( "Hello", 23, true );
obj.showParms( "World", 34, false );
}
}

//compile.bat 编译测试程序
javac JniTest.java -d .
pause

//run.bat
java -classpath . JniTest
pause

我的所有文件都在一个目录中!
现在我也能生成一个DLL文件,但是,我运行不也它,主要是无法使用这个DLL。

出现异常如下:
Exception in thread "main" java.lang.UnsatisfiedLinkError: showParms0
at MyNative.showParms0(Native Method)
at MyNative.showParms(MyNative.java:3)
at JniTest.main(JniTest.java:5)

我的所有文件都在同个目录中,我也不知道为什么不行,大哥请指点一下吧!
谢谢。
xbin999 2003-04-01
  • 打赏
  • 举报
回复
我看了你的程序,我想你在project options-parameters-
Compiler 增加以下参数:-DBUILDING_DLL=1
Linker 增加以下参数:--no-export-all-symbols --add-stdcall-alias
重新编译一下就可以了。
或者在你的makefile.win 中直接修改LIBS为:
LIBS = -L"E:/application/Dev-Cpp/lib" --add-stdcall-alias --no-export-all-symbols
xbin999 2003-03-30
  • 打赏
  • 举报
回复
I had send an example to u.
newman0708 2003-03-28
  • 打赏
  • 举报
回复
to xbin999(xbin) :

我是第一次编译dll,所以我不知道怎么下手。

你能给我一个简单的写好的例子吗?(是为jni编译dll而不是为c++编译哦)

dllwrap --output-def yourdeffile your.o your.lib -o yourdll

xbin999 2003-03-28
  • 打赏
  • 举报
回复
这是makefile里的形式,分别定义的一些宏变量,BIN就是你的动态库名称,用$表示变量替换。

我想你装了dev c++,可以用它的集成环境来编译,然后可以去你的project目录下看看makefile.win就明白了。

其实你也可以直接使用dllwrap 在命令行下编译,用dllwrap --help 可以看到具体参数。
dllwrap --output-def yourdeffile your.o your.lib -o yourdll

Good luck.
newman0708 2003-03-27
  • 打赏
  • 举报
回复
看不懂,讲得具体些!
能不能再解决详细些!

$(BIN): $(LINKOBJ)
$(DLLWRAP) --output-def $(DEFFILE) --implib $(STATICLIB) $(LINKOBJ) $(LIBS) -o $(BIN)

$是什么? $(BIN):是什么? $(LIBS)是什么?

到底怎么弄啊?
xbin999 2003-03-27
  • 打赏
  • 举报
回复
use dllwrap.exe

an example:
DLLWRAP=dllwrap.exe
DEFFILE=yourlib.def
STATICLIB=yourlib.a

$(BIN): $(LINKOBJ)
$(DLLWRAP) --output-def $(DEFFILE) --implib $(STATICLIB) $(LINKOBJ) $(LIBS) -o $(BIN)
newman0708 2003-03-26
  • 打赏
  • 举报
回复
如果我没有vc++,我装了Dev-C++,我该怎么办?
我怎么用Dev-C++来编译dll?
roundside 2003-03-26
  • 打赏
  • 举报
回复
楼主,使用cl -help就可以查阅这些参数的意义了。-I 是编译头文件所在目录;-LD好像是创建dll文件,-Fe好像是创建可执行文件...我也记不清了,你还是自己查吧。
xbin999 2003-03-26
  • 打赏
  • 举报
回复
使用DEV C++来编译动态库,可以用它来生成makefile
icansaymyabc 2003-03-24
  • 打赏
  • 举报
回复
cl 是 vc 的编译链接程序。
参数 -I 指定 include 文件的目录
7569237 2003-03-24
  • 打赏
  • 举报
回复
我说这位兄台~这里是java区啊~区vc+区问啊!
newman0708 2003-03-23
  • 打赏
  • 举报
回复
cl -Ic:\jdk1.1.6\include -Ic:\jdk1.1.6\include\win32 -LD MyNative.c
-FeMyNative.dll
这里的cl 是什么程序,我怎么找不到它?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧