"未定义对我的功能的引用" Android Ndk

时间:2015-08-09 10:10:25

标签: java android android-ndk java-native-interface

我有一个prebuild so文件,其中有两个函数,我试图在C类中的其他项目中的so文件中调用C函数名作为myFunction()作为myFunction() 问题是当我使用ndk-build命令编译项目时,它会给出这个错误"对我的函数的未定义引用"。

这是prebuild所以" c class"

$this->db->select ( 'l.*,
    count(distinct v.sno) as views,
    count(distinct li.sno) as likes,
    count(distinct c.sno) as comments' ,false)
    ->from ( 'listings as l' )
    ->join ( 'likes li', 'l.sno = li.list_id')
    ->join ( 'comments c', 'l.sno = c.list_id')
    ->join ( 'views v', 'l.sno = v.list_id')
    ->where ( 'l.user_id', $user_id)
    ->group_by( 'l.sno');

我在其他项目中调用myFunction()。 这是我调用我的函数的C类。

join()

我在jni文件夹中创建了一个文件夹lib,并将prebuild文件放在&还制作一个Android.mk文件 这是lib文件夹中的Android.mk文件。

$this->db->select ( 'l.*,
    count(distinct v.sno) as views,
    count(distinct li.sno) as likes,
    count(distinct c.sno) as comments' ,false)
    ->from ( 'listings as l' )
    ->join ( 'likes li', 'l.sno = li.list_id','left')
    ->join ( 'comments c', 'l.sno = c.list_id','left')
    ->join ( 'views v', 'l.sno = v.list_id','left')
    ->where ( 'l.user_id', $user_id)
    ->group_by( 'l.sno');

这是我的项目Android.mk文件

int myFunction()
{
    int number = 10;
    return number;
}

jstring Java_com_example_compileso_MainActivity_myFunction(JNIEnv* env, jobject javaThis)
{
    return (*env)->NewStringUTF(env, "String from C class!");
}

我的项目的java类。

void newFunction()
{
    int nResult = myFunction();

    printf("%s", str);
}

1 个答案:

答案 0 :(得分:0)

您必须在java代码中声明myFunction函数:

public class MainActivity extends Activity {

  public native int myFunction();

}