[英]Shared library and Android NDK
我最近開始使用Android NDK,並且在共享庫方面遇到了一些問題。
我使用Eclipse創建了一個項目,該項目使我可以使用NDK和本機函數。 但是現在,我想使用通過QtCreator創建的另一個共享庫。
所以這是我的問題。 即使我沒有調用ndk-build來創建共享庫,是否也可以將共享庫包含到我的NDK項目中?
讓我們舉個例子。 如果我創建一個像這樣的簡單共享庫:
g++ -Wall -shared -fPIC -o libapi.so MyDLL.cpp
我可以在我的NDK項目中使用它嗎,如下所示(Android.mk):
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := api
LOCAL_SRC_FILES := ../sharedLibs/libapi.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := dbapi
LOCAL_SRC_FILES := dbapi.cpp
LOCAL_C_INCLUDES += ../includes
LOCAL_SHARED_LIBRARIES := api
include $(BUILD_SHARED_LIBRARY)
當然,我可以在本機NDK端使用其功能嗎?
使用這種方法,當我嘗試構建Eclipse項目時遇到了這個錯誤:
/libs/armeabi-v7a/libapi.so: File format not recognized
我以為我的共享庫與ndk-build不兼容(是,否?)。
謝謝您的回答。
您是如何建立共享庫的? 是否可以通過NDK為ARM進行編譯? 如果沒有,它將無法正常工作。
評論中的人表示您幾乎可以肯定已經為x86而不是arm進行了編譯。 (您說您在Windows上使用cygwin,默認情況下它將編譯為x86,除非您的Windows Box是Arm Box,我猜不是這樣。)
Android ndk內有一個名為make-standalone-toolchain.sh的腳本。 如果您在當前目錄中安裝了ndk,則可以通過鍵入以下內容使用它:
./android-ndk-r9/build/tools/make-standalone-toolchain.sh --platform=<your desired android platform> --install-dir=<location where you want android toolchain>
這將創建一組構建工具,可用於構建可在設備上運行的arm二進制文件。 這些工具將被命名為諸如
arm-linux-androideabi-gcc
將這些工具放在您的路徑中,並使用它們來構建您的庫。
我不知道cygwin是否包含“文件”命令,但是您可以通過鍵入以下命令來確定共享庫的體系結構:
file libapi.so
如果它說是手臂,那您就很好。 如果顯示x86,則將無法正常運行(除非在x86 android設備上)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.