当我试图运行桌面独立版本时,我在LibGdx项目中得到UnsatisfiedLinkError.请注意,如果我只是直接运行桌面版本而不构建一个独立的jar,只有我先构建一个桌面jar,然后尝试运行它,才会出现此问题.有趣的是,直接运行桌面版本总体上要容易得多,而且我甚至没有接近运行独立的桌面jar,直到我搜索了一大堆jar文件,并手动添加它们到LibGdx项目.
我在Windows 10 x64上使用Android Studio 3.3,gradle 4.10和Java 1.8.0_201,并使用'gradle'命令将我的LibGdx应用程序版本部署到桌面:
gradle desktop:dist 来自ProjectRoot.
然后在运行由此创建的jar文件时,通过从ProjectRoot键入命令行:
cd desktop/build/libs, 然后 java -jar desktop-1.0.jar
这样做我得到了 UnsatisfiedLinkError error
我尝试将jar文件复制到Linux并在那里进行测试,我也遇到了同样的错误.
我做了一些搜索,我发现一个建议可能是调用new SpriteBatch()过早发生了:
就像在create()核心模块中的函数之前一样,但这不是问题,因为new SpriteBatch()调用从来没有比这更早.
此链接使用的建议LibGdx Setup Generator也没有帮助我,因为我已经使用该LibGdx Setup GeneratorGUI工具来创建同一个项目,我仍然遇到这个问题.
我注意到,虽然从程序的输出中,它在new SpriteBatch()调用时抛出了UnsatifisedLinkError异常,因为该链接确实引用了,但它是从create()函数调用的,而不是早于该函数.
我做了一个实验,发现如果我new SpriteBatch()完全删除了调用以及依赖于该调用的所有其他代码,例如创建纹理,并使用精灵批处理来绘制该纹理.我发现通过这样做,程序运行没有得到错误,当然我也无法绘制任何东西.
所以,然后我做了另一个实验,并按照以下方式将new SpriteBatch()调用从create函数移到render()函数中,正如您将在代码中注意到的那样.我只是尝试在每次执行render()函数时创建SpriteBatch(),如果尚未创建它,并输出它抛出的次数UnsatisfiedLinkError exception
------------------------- MyGdxGame.java ---------------------- ----------------
package com.mygdx.game;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
public class …Run Code Online (Sandbox Code Playgroud) desktop-application gradle libgdx unsatisfiedlinkerror spritebatch
Java代码:
package Package;
public class IntArray {
private native int sumArray(int[] arr);
public static void main(String args[]) {
IntArray p = new IntArray();
int arr[] = new int[10];
for(int i=0 ; i<10 ; i++) {
arr[i] = i;
}
int sum = p.sumArray(arr); // pass the array to the c function sumArray
System.out.println("Sum is : " + sum);
}
static { // 17th statement
System.loadLibrary("IntArray");
}
}
Run Code Online (Sandbox Code Playgroud)
C代码:
#include<stdio.h>
#include "Package_IntArray.h"
jint Java_Package_IntArray_sumArray(JNIEnv *env, jobject obj, jintArray arr)
{
jint …Run Code Online (Sandbox Code Playgroud) I have an image converter app on google play that runs fine and well, it incorporates NDK for support of more file formats using the DevIL Image Processing library.
It wokrs fine on most devices but since Android 4.4 Kitkat came out, i've received emails and crash reports on Google Play Console especially from Nexus devices that have 4.4 and now other older devices that receive the update
Here is the crash report
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "png_set_longjmp_fn" …Run Code Online (Sandbox Code Playgroud) 我们有这个加载本机库的应用程序,这个库提供了我们调用的本机方法.在某些手机(特别是较慢的手机)上,这会导致问题.每当(我认为)库仍在"加载"并且过早地调用方法时,就会发生UnsatisfiedLinkError.
有办法处理这个问题吗?就像检查库是否已经加载一样.
在设备中运行应用程序时出错:
java.lang.UnsatisfiedLinkError: Native method not found: com.esri.core.runtime.LicenseImpl.nativeIsClientIdValid:(Ljava/lang/String;)Z
at com.esri.core.runtime.LicenseImpl.nativeIsClientIdValid(Native Method)
at com.esri.core.runtime.LicenseImpl.a(Unknown Source)
at com.esri.android.a.b.b(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
相关代码:
import com.esri.android.runtime.ArcGISRuntime;
public class MainActivity extends FragmentActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArcGISRuntime.setClientId("xxxxxxxxxxxxxxxx");
......
Run Code Online (Sandbox Code Playgroud)
的build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 19
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "xxx.xxxx.xxxxx"
minSdkVersion 17
targetSdkVersion 19
versionCode 1
versionName "1.0"
renderscriptTargetApi 19
renderscriptSupportModeEnabled true
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/LGPL2.1'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
buildTypes {
release {
minifyEnabled …Run Code Online (Sandbox Code Playgroud) 我目前正在创建一个用于反应原生项目的Android库.我需要向javascript发出一个map,所以我正在使用react native的WriteableMap类.不幸的是,该类在一个静态块中加载reactnativejni SO,这会在单元测试期间导致UnsatisfiedLinkError.我正在使用JUnit和Mockito进行测试.
我的代码:
@Override
public void onSomething() {
WritableMap params = Arguments.createMap();
//fill map
sendEvent("onChange", params);
}
Run Code Online (Sandbox Code Playgroud)
错误:
java.lang.UnsatisfiedLinkError: no reactnativejni in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1119)
at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:172)
at com.facebook.react.bridge.NativeMap.<clinit>(NativeMap.java:23)
at com.facebook.react.bridge.Arguments.createMap(Arguments.java:29)
at me.MyClass.onSomething(myClass.java:23)
Run Code Online (Sandbox Code Playgroud)
我Arguments.createMap()在看到关于为单元测试存储WriteableMap的注释后开始使用该方法,但它是静态的,我宁愿不必存根静态方法.
有没有办法在运行单元测试时摆脱这个错误?
我正在尝试使用JNI并获取java.lang.UnsatisfiedLinkError.与其他关于此问题的其他百万问题不同,我在我的路径上有lib,甚至在我删除它时看到异常更改.我确定我创建的DLL有问题,但我不确定是什么.
这是我的java类代码:
package com;
public class Tune {
static {
System.loadLibrary("lala");
}
public static void main(String[] args) {
Tune j = new Tune();
System.out.println("2+6="+j.add(2, 6));
}
native public int add(int x,int y);
}
Run Code Online (Sandbox Code Playgroud)
这是我的javah生成的头文件的删节部分:
/*
* Class: com_Tune
* Method: add
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_Tune_add
(JNIEnv *, jobject, jint, jint);
Run Code Online (Sandbox Code Playgroud)
这是我的c ++代码:
#include <jni.h>
#include <com_Tune.h>
JNIEXPORT jint JNICALL Java_com_Tune_add
(JNIEnv * env, jobject obj, jint x, jint y) {
return x+y;
}
Run Code Online (Sandbox Code Playgroud)
这是我从eclipse获得的运行时异常:
Exception in …Run Code Online (Sandbox Code Playgroud) c++ java java-native-interface codeblocks unsatisfiedlinkerror
我是jni的新手,我正在修改一个教程来实现一个简单的本机方法,但是我得到了一个不满意的链接错误.据我所知,我完全按照教程中的步骤进行操作.请帮我.
这是java包装器代码:
package com.cookbook.jni;
public class SquaredWrapper {
// Declare native method (and make it public to expose it directly)
public static native int squared(int base);
// Provide additional functionality, that "extends" the native method
public static int to4(int base)
{
int sq = squared(base);
return squared(sq);
}
// Load library
static {
System.loadLibrary("squared");
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的Android.mk文件的样子:
LOCAL_PATH:= $(调用my-dir)
包括$(CLEAR_VARS)
LOCAL_MODULE:=平方LOCAL_SRC_FILES:= squared.c
包含$(BUILD_SHARED_LIBRARY)
这是我的.c文件的样子:
#include "squared.h"
#include <jni.h>
JNIEXPORT jint JNICALL Java_org_edwards_1research_demo_jni_SquaredWrapper_squared
(JNIEnv * je, jclass jc, jint base)
{ …Run Code Online (Sandbox Code Playgroud) java-native-interface android header-files unsatisfiedlinkerror
我在项目中使用“.so”文件,但它给出以下错误“ java.lang.UnsatisfiedLinkError:未找到布尔值的实现”,我已经尝试使用 Cygwin 重新创建“.so”并将其放入jniLibs文件夹中并使用 create一罐它,但它给出了同样的错误。
但相同的“.so”文件正在我现有的项目中工作。我尝试了很多方法,但根本不起作用,我该怎么办?
com.amaze.filemanager E/art:找不到布尔值 com.amaze.filemanager.scanner.SignatureLib.InitScanner(java.lang.String, java.lang.String) 的实现(尝试过 Java_com_amaze_filemanager_scanner_SignatureLib_InitScanner 和 Java_com_amaze_filemanager_scanner_SignatureLib_InitScanner__Ljava_lang_String_2Ljava_lang_String_2) 12- 19 11:47 :07.463 4579-4934/com.amaze.filemanager E/AndroidRuntime:致命异常:Thread-5230进程:com.amaze.filemanager,PID:4579 java.lang.UnsatisfiedLinkError:找不到布尔值com.amaze.filemanager.scanner的实现.SignatureLib.InitScanner(java.lang.String, java.lang.String) (尝试了 Java_com_amaze_filemanager_scanner_SignatureLib_InitScanner 和 Java_com_amaze_filemanager_scanner_SignatureLib_InitScanner__Ljava_lang_String_2Ljava_lang_String_2) 在 com.amaze.filemanager.scanner.SignatureLib.InitScanner(本机方法) 在 com.amaze.file manager.scanner.SignatureLib。 InitializeScanner(SignatureLib.java:42) 在 com.amaze.filemanager.scanner.Signature.(Signature.java:62) 在 com.amaze.filemanager.ScanForVirusActivity$1.run(ScanForVirusActivity.java:66)
public class SignatureLib {
static {
System.loadLibrary("Signature");
}
SharedPreferencesUtils spu;
Context context;
public SignatureLib(Context context) {
this.context = context;
}
private native boolean InitScanner(String strDBPath, String dbPathTemp);
private native boolean DeInitScanner();
private native String checkVirus(String filepath);
private native boolean …Run Code Online (Sandbox Code Playgroud) 我尝试在 M1 上的 IntelliJ IDEA Ultimate MacBook Pro 中启动一个正在运行的项目,我在控制台中收到以下错误:
[错误] java.lang.UnsatisfiedLinkError:/Users/用户名/Library/Caches/JNA/temp/jna2878211531869408345.tmp:dlopen(/Users/username/Library/Caches/JNA/temp/jna2878211531869408345.tmp,0x0001):尝试: '/Users/username/Library/Caches/JNA/temp/jna2878211531869408345.tmp'(胖文件,但缺少兼容架构(有'i386,x86_64',需要'arm64e')),'/usr/lib/jna2878211531869408345.tmp ' (没有这样的文件)
我尝试在删除所有JDK后在arm架构上重新安装JDK,但没有帮助
需要欺骗什么来解决这个问题?
完整的堆栈跟踪:
[error] java.lang.UnsatisfiedLinkError: /Users/romangoltsov/Library/Caches/JNA/temp/jna2878211531869408345.tmp: dlopen(/Users/romangoltsov/Library/Caches/JNA/temp/jna2878211531869408345.tmp, 0x0001): tried: '/Users/romangoltsov/Library/Caches/JNA/temp/jna2878211531869408345.tmp' (fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64e')), '/usr/lib/jna2878211531869408345.tmp' (no such file)
[error] at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
[error] at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2442)
[error] at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2498)
[error] at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2694)
[error] at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2627)
[error] at java.base/java.lang.Runtime.load0(Runtime.java:768)
[error] at java.base/java.lang.System.load(System.java:1837)
[error] at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:1018)
[error] at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:988)
[error] at com.sun.jna.Native.<clinit>(Native.java:195)
[error] at io.methvin.watchservice.jna.CarbonAPI.<clinit>(CarbonAPI.java:19)
[error] at io.methvin.watchservice.jna.CFStringRef.toCFString(CFStringRef.java:23)
[error] at io.methvin.watchservice.MacOSXListeningWatchService.register(MacOSXListeningWatchService.java:101)
[error] at …Run Code Online (Sandbox Code Playgroud) android ×6
java ×3
c++ ×2
android-ndk ×1
apple-m1 ×1
arcgis ×1
c ×1
codeblocks ×1
gradle ×1
header-files ×1
junit ×1
libgdx ×1
libpng ×1
mockito ×1
native ×1
react-native ×1
scala ×1
spritebatch ×1