概述
相同的动态链接库(tableOcr.dll)在不同的系统win10s(win10系列和win10职业系列)中表现出不同的结果。
构建工具
1. java
2. corretto-1.8.0_302
openjdk version "1.8.0_302"
OpenJDK Runtime Environment Corretto-8.302.08.1 (build 1.8.0_302-b08)
OpenJDK 64-Bit Server VM Corretto-8.302.08.1 (build 25.302-b08, mixed mode)
3. c++11
4. visual studio 2017 (14.9)
背景
我需要java(x64)通过jni调用我的c++ func,我的共享库是tableOcr.dll(x64)和tableOcrJni.dll(x64),它们链接到tableOcr.dll;我执行了以下步骤:
#ifndef OCREXPORT
# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
# if defined(STATIC_LINKED)
# define OCR_EXPORT
# else
# define OCR_EXPORT __declspec(dllexport) ///! 为了动态加载动态库
//# define OCR_EXPORT ///! 为了动态加载动态库
# endif
# else
# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
# define OCR_EXPORT __attribute__ ((visibility("default")))
# else
# define OCR_EXPORT
# endif
# endif
#endif
OCR_EXPORT int _cdecl obtain_table_info_init(const char* _IN_ models
加法
E:/mydll/
。发布于 2022-05-12 21:00:05
它是体系结构(bitness)在Java (可执行文件)和您的.dll (pc064 <=> pc032或反之亦然)之间不匹配的。有关该主题的更多细节,请查看[SO]:抛出OSError:[WinError 193] %1不是有效的Win32应用程序(@CristiFati的答案)。
要检查Java体系结构,请使用:
[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q072210792]> java -version
java version "1.8.0_331"
Java(TM) SE Runtime Environment (build 1.8.0_331-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.331-b09, mixed mode)
在我的例子中,它是pc064 (064位)。
你有两个选择:
因为我不知道哪一个是谁,我的建议是走向pc064。
为了检查PE_s的比特性、依赖性和更多细节,可以使用[GitHub]:幸运/依赖或(旧的) 依赖沃克或(_VStudio's) DumpBin ([MS.Docs]:DUMPBIN参考)。
发布于 2022-06-07 01:29:10
这是链接不匹配。我的tableOcrJni.dll的行为与tableOcr.dll相同。所以我只需要对tableOcr.dll做任何尝试。TableOcr.dll像我说的那样链接一些dll,所以我把tableOcr.dll放到E:/mydll
,把tableOcr.dll的动态链接dll放到E:/mydllDepend
,然后激活ENV。它工作在Win10 x64家庭系列!但没有证据证明我必须这样做。
https://stackoverflow.com/questions/72210792
复制相似问题