2016-09-26 17 views
1

私は、Androidスタジオの新しいバージョンで小さなテストプロジェクトを作成して、新しいC++サポートをテストしました。CMakeリンクを共有ライブラリ(Androidスタジオ2.2)に実行

共有ライブラリから関数を呼び出そうとしています。関数は、ここでは他の.cppファイルに

である私のCmakeLists.txtファイルの一部です:

add_library(JNI SHARED src/main/cpp/native-lib.cpp) 
add_executable(testex src/main/cpp/test2.cpp) 
INCLUDE_DIRECTORIES (src/main/cpp) 
target_link_libraries(testex JNI) 

test2.hファイル:

class Test{ 
public: 
     int side; 
     intgetArea(); 
}; 

test2.cppファイル:

#include "test2.h" 
int Test::getArea(){ 
      return side*side; 
} 

そして、私のネイティブlib.cppファイルの一部:

JNIEXPORT jstring JNICALL 
.....(JNIEnv *env,jobject instance){ 
Test *test = new Test(); 
test->getArea(); 
. 
. 
. 

私はこれらのエラーを取得する:エラー:エラー:「テスト::のgetArea()

打ち鳴らす++へ 未定義の参照リンカコマンドは終了コード1(呼び出しを参照するために-vを使用)

で失敗しましたninja:build stopped:サブコマンドが失敗しました。私は、誰かが私を助けることができると思います:)

+0

ライブラリなどの仕組みについて考えることを検討する必要があります。 test2.cppは実行可能ファイルにコンパイルされます。あなたはそれをライブラリで使うことはできません。 – Hayt

答えて

1

アンドロイドCMakeのサポート

は、実行時にロードするためのJavaコードの共有ライブラリを生成することです。共有libは他のネイティブlib(共有または静的)の他の関数を呼び出すことができます。あなたの使用モデルはサポートされていません:アンドロイドはjniフレームワークのネイティブ実行可能ファイルをサポートしていません。

関連する問題