我正在嘗試編寫一個使用GNU科學庫(GSL)的Android應用程序。特別是,我對BLAS實現'libgslcblas.so'感興趣。我決定利用Android NDK並編寫一個加載庫並進行相應函數調用的Java程序。Android NDK原生函數調用問題
爲了測試這將如何工作,我試圖編寫一個簡單的程序來加載'libm.so'並進行任意的函數調用。這似乎對NDK的,我能想到的一個簡單的用例,但我遇到了以下問題:
07-05 18:11:07.264: I/System.out(1298): debugger has settled (1464)
07-05 18:11:07.583: D/dalvikvm(1298): No JNI_OnLoad found in /system/lib/libm.so 0x41345988, skipping init
07-05 18:11:07.903: W/dalvikvm(1298): No implementation found for native Lissm/libctest/LibCtest;.sqrt (D)D
我的代碼如下:
package issm.libctest;
import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;
public class LibCtest extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
setContentView(R.layout.activity_lib_ctest);
double x = sqrt(4);
tv.setText("Sine of: " + x);
setContentView(tv);
}
public native double sqrt(double x);
static
{
System.load("/system/lib/libm.so");
}
}
我真的不瞭解問題。正如我所說,這是我能想到的NDK最簡單的用法。有人可以幫我解決這個問題嗎?
謝謝!
您將需要使用[JNI](http://developer.android.com/guide/practices/jni.html)來調用您使用NDK重新編譯的本機函數。 – 2012-07-06 00:57:31
@KeithFlower存在問題庫中的零引用... – t0mm13b 2012-07-06 01:02:46
是的。我正在談論他的全球目標,我認爲這是在GSL中調用函數,而不是使用libm.so進行測試(這不會奏效)。 – 2012-07-06 01:08:08