我有一个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);
}
答案 0 :(得分:0)
您必须在java代码中声明myFunction
函数:
public class MainActivity extends Activity {
public native int myFunction();
}