2016-11-09 2 views
0

を取得C++関数を呼び出す:私はCMakeList.txtを持ってAndroidは、私は私のネイティブlib.cppファイル内の関数を次のようしているUnsatisfiedLinkErrorを

public class MainActivity extends AppCompatActivity { 
    static { 
     System.loadLibrary("native-lib"); 
    } 
    public static native long convert32to64(long l); 

    ... 
} 

私MainActivity.javaで
JNIEXPORT jlong JNICALL 
Java_com_example_z_myapplication_MainActivity_convert32to64(JNIEnv *env, jobject instance, 
                  jlong l) { 

// TODO 
l = l + 76561197960265728L; 
return l; 
} 

cmake_minimum_required(VERSION 3.4.1) 

# Specifies a library name, specifies whether the library is STATIC or 
# SHARED, and provides relative paths to the source code. You can 
# define multiple libraries by adding multiple add.library() commands, 
# and CMake builds them for you. When you build your app, Gradle 
# automatically packages shared libraries with your APK. 

add_library(# Specifies the name of the library. 
      native-lib 

      # Sets the library as a shared library. 
      SHARED 

      # Provides a relative path to your source file(s). 
      src/cpp/native-lib.cpp)   

しかし、私はこのエラーが発生しています:

java.lang.UnsatisfiedLinkError: No implementation found for long com.example.z.myapplication.MainActivity.convert32to64(long) (tried Java_com_example_z_myapplication_MainActivity_convert32to64 and Java_com_example_z_myapplication_MainActivity_convert32to64__J) 

誰でも私に何が間違っているのか教えていただけますか?

答えて

2

C++ JNIにはextern "C"が必要です。

extern "C" JNIEXPORT jlong JNICALL 
Java_com_example_z_myapplication_MainActivity_convert32to64(
     JNIEnv *env, jobject instance, jlong l) { 
    // ... 
} 
+0

私はextern "C"を追加しましたが、それでもエラーが表示されます –

+0

@TomDawnは共有ライブラリが正しく再コンパイルされており、実行時にJavaコードからアクセスできますか?コンパイル後にネイティブのlibモジュールをコメントアウトするようにアンドロイドサンプルが示唆していることに気をつけてください。 – nandsito

+0

extern "C"を追加して実行をクリックすると、シミュレータでの実行が開始されます。それを再コンパイルする方法を教えてください。申し訳ありません、おそらくこれはダムの質問です –

0

jniライブラリが間違ってビルドされているようです。 jniライブラリファイルをチェックして、ライブラリファイルに正確なシンボルリンクがあることを確認してください。

+0

申し訳ありませんが、私はこれで初めてです、jniライブラリファイルはどこですか? –

関連する問題