3

/system/libs/my_lib.soディレクトリからライブラリを正常にロードしました。このライブラリで定義されている C/C++ 関数を使用するにはどうすればよいですか?

public class MainFrom extends Activity {

    private static final String LOG_TAG = "MainFrom";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main); 
        // How to use the functions of test_lib.so? 

        /*
            java.lang.UnsatisfiedLinkError: stringFromC


        String s1 = stringFromC(), s2 = stringFromCpp();

        Log.w(LOG_TAG, stringFromC());   
        Log.w(LOG_TAG, stringFromCpp());  */
    }

    public native String stringFromC();
    public native String stringFromCpp();

    static {
        try { 
            System.load("/system/lib/test_lib.so");
            Log.i(LOG_TAG, "MainFrom. Success!");
        } catch (UnsatisfiedLinkError e) {
            Log.e(LOG_TAG, "MainFrom. UnsatisfiedLinkError");
        }
    }

}

stringFromCstringFromCpp存在し.c.cppコンパイルされたファイルtest_lib.so

4

3 に答える 3

3

私は自分の問題を解決しました。

書く必要があった

System.load("/system/lib/libtest_lib.so");

それ以外の

System.load("/system/lib/test_lib.so");

とても奇妙。私が走れば

adb shell 
ls /system/lib

test_lib.so ファイルが表示されます。libプレフィックスを使用してライブラリを正しくロードするのはなぜですか?

于 2012-04-11T09:51:32.780 に答える
0

Android NDK で .cpp ファイルをコンパイルするには、Android.mk ファイルに入れLOCAL_CPPFLAGS := $(YOURMODULE_CPPFLAGS)、入力する必要があります。LOCAL_SRC_FILES := yourfile.cpp

それがあなたを助けることを願っています。

于 2012-04-10T12:34:54.677 に答える