簡體   English   中英

共享庫和Android NDK

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM