kc ochibili
kc ochibili

Reputation: 3131

java.lang.UnsatisfiedLinkError: Native method not found:

I keep getting this error when making calls to my native methods compiled in an .SO file. i dont why its happening since everything seems to be set up right any help would be appreciated

error:

java.lang.UnsatisfiedLinkError: Native method not found: de.jurihock.voicesmith.dsp.Math.abs:(FF)F
at de.jurihock.voicesmith.dsp.Math.abs(Native Method)

cpp file: pastebin.com/aBHNz642

Math.java

 package de.jurihock.voicesmith.dsp;

public final class Math
{
     static
        {
        System.loadLibrary("Voicesmith");
        }

public static final float   PI  = (float) java.lang.Math.PI;

public static int round(float value)
{
    return java.lang.Math.round(value);
}

public static native float pow(float base, float exponent);

public static native float log10(float value);

public static native float min(float a, float b);

public static native float max(float a, float b);

public static native float floor(float value);

public static native float ceil(float value);

public static native float sin(float angle);

public static native float cos(float angle);

public static native float sqrt(float value);

public static native float atan2(float y, float x);

public  native float abs(float real, float imag);

public static native float arg(float real, float imag);

public static native float real(float abs, float arg);

public static native float imag(float abs, float arg);

public static native float random(float min, float max);

public static native float princarg(float phase);

public static native short mean(short[] buffer, int offset, int length);

public static native float rms(short[] buffer, int offset, int length);

public static native float rms(short[] buffer, int offset, int length, short mean);

public static native float rms2dbfs(float value, float min, float max);

}

android.mk

    LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Name of the library without prefix "lib" and file extension
LOCAL_MODULE := Voicesmith

# Optimization flags (see KissFFT makefile)
LOCAL_ARM_MODE := arm
LOCAL_CFLAGS := -Wall -O3 -ffast-math -funroll-loops -fomit-frame-pointer

# LogCat support
# LOCAL_LDLIBS := -llog

# Debugging flag
# LOCAL_CFLAGS += -g

# Include all .c/.cpp files to build
LOCAL_SRC_FILES := $(shell cd $(LOCAL_PATH); \
    find . -type f -name '*.c'; \
    find . -type f -name '*.cpp')

include $(BUILD_SHARED_LIBRARY)

Upvotes: 0

Views: 5212

Answers (1)

ashoke
ashoke

Reputation: 6461

your native method abs is missing static in its declaration. Your build should have caught the error, Android Studio does..

Try changing it to

public static native float abs(float real, float imag);

Some other suggestions:

  • name Math.h can conflict with standard math.h on native side (wont even compile if you try on windows, as windows file system is case insensitive ... i had to change your Math.h to Math2.h).

  • Even on java side, there is already Math class at java.lang.Math with similar functions (eg: java.lang.Math.abs), can potentially autocomplete with java.lang.Math.abs particularly for your code snippet above as it misses static in declaration (``java.lang.Math.abs` is static IDE matches to it)

Upvotes: 1

Related Questions