使用Eclipse为JNI构建DLL

时间:2011-12-15 22:34:13

标签: java eclipse dll java-native-interface cygwin

我想使用Eclipse和Cygwin构建一个JNI DLL。我知道那里有很多例子,但是没有一个例子适合我。我花了两天时间在这上面,我仍然无法让Eclipse正确构建一个frickin dll。

我可以在Visual Studio中使用JNI代码构建这个Windows dll。但我的主要IDE是Eclipse,我想将代码放在一个地方,一个项目。当我在Eclipse中编译它时,我会得到一个dll,但Java VM在加载库时崩溃,没有错误告诉我什么是错的。所以我正在考虑它的链接方式......以下是VS2008如何编译和链接我正在显示VS的命令行:

使用visual studio编译和链接dll

/Od /I "C:\a_Mine\siglib\include" /I "C:\Program Files (x86)\Java\jdk1.6.0_25\include
\win32" /I "C:\Program Files (x86)\Java\jdk1.6.0_25\include" /I "..\..\include" /D 
"_CRT_SECURE_NO_WARNINGS" /D "SIGLIB_DLL_SOURCE=1" /D "_VC80_UPGRADE=0x0600" /D 
"_WINDLL" /D "_MBCS" /Gm /EHsc /RTC1 /MTd /Fp".\Debug/dynamic_library.pch" 
/Fo".\Debug/" /Fd".\Debug/" /W3 /nologo /c /ZI /TP /errorReport:prompt

Linker MS命令行

/OUT:"Debug/siglib.dll" /INCREMENTAL /NOLOGO /LIBPATH:"C:\Program Files (x86)\Java\jdk1.6.0_25\lib" 
/DLL /MANIFEST /MANIFESTFILE:".\Debug\siglib.dll.intermediate.manifest" 
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:".\Debug/siglib.pdb" 
/DYNAMICBASE:NO /IMPLIB:".\Debug/siglib.lib" /MACHINE:X86 /ERRORREPORT:PROMPT 
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib 
ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

这是我的Eclipse Java - C / C +项目的链接器。

g++ -L"C:\Program Files (x86)\Java\jdk1.6.0_25\lib" -L"C:\Program Files\Microsoft
SDKs\Windows\v6.0A\Lib\x64" -shared -o "myjni.dll" $(OBJS) $(USER_OBJS)  -lkernel32 
-luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 
-luuid -lodbc32 -lodbccp32 -ljvm

那么如何使用Eclipse Cygwin将其链接或编译?

1 个答案:

答案 0 :(得分:1)

你应该将你的日食更新到最新版本并获得ADT ver20。这会从构建中删除cygwin以及编译windows dll时可能需要的所有自定义脚本。