我有一个带有一些JNI的项目,里面有一个makefile,用于在Windows 10 64位下编译dll
。对于软件约束,我需要为32位JRE编译dll
库。
我的makefile如下:
CC32=C:\i686-w64-mingw32-gcc\bin\i686-w64-mingw32-g++.exe
CC64=C:\Program\ Files\mingw-w64\x86_64-6.2.0-win32-seh-rt_v5-rev1\mingw64\bin\g++.exe
all: LibJNI32.dll LibJNI64.dll
LibJNI32.dll: LibJNI.cpp LibJNI.h
${CC32} -shared -o $@ $< -mtune=generic -m32 -std=gnu++11 -O2 \
-I. -IC:\Program\ Files\ (x86)\Java\jdk1.8.0_151\include -IC:\Program\ Files\ (x86)\Java\jdk1.8.0_151\include\win32
LibJNI64.dll: LibJNI.cpp LibJNI.h
${CC64} -shared -o $@ $< -mtune=generic -fPIC -m64 -std=gnu++11 -O2 \
-I. -IC:\Program\ Files\Java\jdk1.8.0_121\include -IC:\Program\ Files\Java\jdk1.8.0_121\include\win32
LibJNI.h: LibJNI.java
javah -o LibJNI.h -cp ../java my.package.LibJNI
虽然我的java程序可以很好地加载LibJNI32.dll
和LibJNI64.dll
,但只能使用LibJNI64.dll
调用jni。那些LibJNI32.dll
会抛出UnsatifiedLinkError
。
我的makefile是否缺少编译好32位的东西?
答案 0 :(得分:0)
如果您使用32/64位库,则在共享公共系统库时可能会遇到困难:
答案 1 :(得分:0)
好的,我终于找到了解决方案: Java JNI native library loads on 64bit and 32bit, but doesn't run on 32bit [SOLVED]
解决方案是对{32} dll目标使用-Wl,--kill-at
编译器标志。