2016-10-26 11 views
0

私はアンドロイドで簡単なCプログラムを直接実行しようとしています。他のライブラリに依存するAndroid NDKとdlopen

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) 
LOCAL_CFLAGS +=-fPIE 
LOCAL_LDFLAGS += -fPIE -pie 
LOCAL_MODULE := hello 
LOCAL_LDLIBS += -llog -ldl 
include $(BUILD_EXECUTABLE) 

しかし、私はこの

のdlopenが失敗し得るlibのロード時に:私はこれはAndroid.mkとNDK歌う構築

int main(int argc, char *argv[]) { 
    void *Mylib = dlopen("path/to/some/so/library", RTLD_NOW); 
    if (!Mylib) { 
      fputs (dlerror(), stderr); 
      exit(1); 
    } 
    return 0; 
} 

ライブラリfound1ない "libvendorconn.soを" |

明らかに私がオープンしようとしているライブラリは、システムのどこかにあるデフォルトのアンドロイド・ライブラリかもしれないohterライブラリ(libvendorconn.soはどこですか)が必要でしょうか?

これを解決する方法はありますか? Pherapsは、必要に応じてシステムlibを使用するようにビルドするときにNDKに指示しますか?

答えて

0

あなたはdlopen("libvendorconn.so", RTLD_NOW)にできる必要があり、ローダはデフォルトの検索パスでそのファイルを探します。

旧バージョンのAndroidには、ライブラリを特定の順序でロードして動作させるためのローダーが必要でした。 Javaの土地ではこれを解決する最良の方法はReLinkerですが、それは純粋なネイティブバイナリには役立ちません。 NDKはこれを助けることができるndk-depends(明らかに文書化されていない)を出荷します。

関連する問題