2016-03-24 18 views
1

私の小さなNDKアプリケーションにはJavaは必要ありません。共有の.soライブラリをロードしたい。 jniを使ってC++からLoadLibraryを直接呼び出す必要があります。誰かがそれを試しましたか?私の.so共有ライブラリのLoadLibraryをC++から呼び出す方法

私は既に.soライブラリをapkにメインの.soファイルとともにパッケージ化しました。 私はVisual Studio 2015をAndroid開発に使用していますので、.mkファイルはありません。

答えて

0

共有ライブラリを使用するには、C++からloadLibrary(...)を呼び出す必要はありません。 C++コードをビルドするときにリンクするだけです。

GoogleのNDK examplesnative-activity exampleをご覧ください。新しい実験的NDKサポートを使用する場合は、代わりにthese examplesを参照する必要があります。

更新: Visual Studioユーザーの場合、おそらくこのtutorial on creating a native-activityが役立ちます。私はこのようなLoadLibrary関数を呼び出すために管理

+0

ありがとう、それは正しいことです。 Unfortunatly私はandroid.mkファイルにアクセスできないので、私はVisual Studio 2015を使用してAndroid用に開発していますので、奇妙なXMLや.mkファイルはないので(LOCAL_SHARED_LIBRARIESはありません)... – Yuriv

+0

それは私がすでに持っている標準のネイティブアクティビティです。私の問題私は現在、自分のネイティブアクティビティから共有された.soライブラリを使用できません。そのチュートリアルではそのことを説明していません。 – Yuriv

+0

Visual StudioがNDKアプリケーションの依存関係を解決する方法を知る必要があります。 loadLibrary(...)の使用はJavaからそのコードを使用するために必要なステップですが、これらの変わったXMLやその他の構成では、依存関係の記述が必要です。私はVSを持っていないので、それ以上にあなたを助けることはできませんが、おそらくこの例はいくつかの答えを明らかにするでしょう:https://code.msdn.microsoft.com/TwoLibs-Android-Library-6396e5c4/view/SourceCode #content幸運。 –

0

*jclass sysClass = (*env)->FindClass(env, "java/lang/System"); 
jmethodID loadLib = (*env)->GetStaticMethodID(env, sysClass, "loadLibrary", "(Ljava/lang/String;)V"); 
jstring jstr1 = (*env)->NewStringUTF(env,"libSharedObject1"); 
(*env)->CallStaticVoidMethod(env, sysClass, loadLib,jstr1);* 

それは関係のないところでクラッシュにそれが成功し、後に実行残念ながらにもかかわらずので、私の呼び出しはラインの下のいくつかの破損の原因となるiguess。私はまたこのようなロードライブラリを呼び出すことができます:

void * lib_handle = dlopen( "/ data/data/Android1/lib/libSharedObject1.so"、RTLD_LAZY);

この呼び出しは、残念ながらその場所で自分のライブラリを見つけられません。パスがなければ、それも見つからないので、私はまだ詰まっています。

関連する問題