2013-01-14 86 views
2

我對我目前正在嘗試的內容感到有些困惑:我想通過NDK交叉編譯一個用於Android的C庫,以便我可以創建一個JNI包裝,並從我的Android Java代碼調用它的一些功能。交叉編譯用於Android的C庫NDK

  • 我跟着本指南crosscompile libopus(庫我想在我的項目包括):http://mortoray.com/2012/08/21/android-ndk-cross-compile-setup-libpng-and-freetype/這意味着我現在有上的/ opt/Android的EXT /,一個獨立的工具鏈有一個lib文件夾包含我交叉編譯的庫(libopus.a,libopus.so等)

  • 我的Android項目中還包含一個jni文件夾,它包含一些我想要的JNI綁定的C代碼,並且可以從我的Java代碼調用,但它什麼也沒做(我可以調用它但這是一個空白功能)。這意味着在我的項目中,有一個帶有「libopusUtilsNative.so」(包裝器)的/ lib/armeabi目錄。

我的問題是:

如何添加,我只是crosscompiled到項目庫中,以便(舉例來說)我可以做的C源代碼文件中的#include調用我已經有了並可以訪問庫函數?我有點迷路了,如何:

  1. 包括我交叉編譯到我的項目庫。

  2. 如何使我創建的包裝代碼包括它(我猜這與添加一些代碼到我的Android.mk文件有關,但我無能爲力)。

回答

1

,你鏈接到該指南包含如何修改Android.mk文件爲您的JNI庫的例子(或他的情況下,本機應用程序),以防止交叉編譯庫鏈接:

PLATFORM_PREFIX := /opt/android-ext/ 

LOCAL_PATH := $(PLATFORM_PREFIX)/lib 
include $(CLEAR_VARS) 
LOCAL_MODULE := libpng 
LOCAL_SRC_FILES := libpng.a 
include $(PREBUILT_STATIC_LIBRARY) 

# The in your project add libpng 
LOCAL_STATIC_LIBRARIES := android_native_app_glue libpng 

這幾乎是如果你想要靜態鏈接到libopus的話。或者,如果你想鏈接到共享庫,使用這樣的東西:Using my own prebuilt shared library in an Android NDK project

+0

是的,但我不知道如何將該位添加到我已經存在的Android.mk。例如,在我的Android.mk中,LOCAL_PATH變量已經被定義爲$(call my-dir)。如果我只是將它複製粘貼到我現有的Android.mk中,那不是問題嗎? –

+0

好吧,如果你想要的話,你可以從上面的makefile代碼中刪除'LOCAL_PATH'賦值,並在'LOCAL_SRC_FILES'中指定lib的完整路徑。 – Michael

+0

它似乎在某種程度上起作用。這是我目前的問題:http://stackoverflow.com/questions/14325440/undefined-reference-to-function-in-static-library-with-ndk –