2012-03-01 50 views
6

Tôi có một số thư viện và tiêu đề được chia sẻ cho chúng. Tôi muốn xây dựng thư viện chia sẻ thứ ba bằng các hàm từ hai thư viện trước đó. Có vấn đề với makefile tôi nghĩ. Khi tôi cố gắng để xây dựng nhận này:Xây dựng thư viện được chia sẻ liên kết với thư viện chia sẻ không chuẩn khác

Android NDK: /cygdrive/d/.../jni/Android.mk: Cannot find module with tag 'shared1' in import path 
Android NDK: Are you sure your NDK_MODULE_PATH variable is properly defined ? 
Android NDK: The following directories were searched: 
Android NDK: 
/cygdrive/d/.../jni/Android.mk:36: *** Android NDK: Aborting. . Stop.

cấu trúc của dự án của tôi:

jni/ 
- myfile.c 
- Android.mk 
    jni/dec/ 
    - lot of header files 
    jni/enc/ 
    - lot of header files 
libs/armeabi/ 
- shared1.so 
- shared2.so

cũng Android.mk sourse:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_C_INCLUDES := \ 
    $(LOCAL_PATH)/dec \ 
    $(LOCAL_PATH)/enc 

LOCAL_SHARED_LIBRARIES := shared1 shared2 

LOCAL_MODULE := mylib 
LOCAL_SRC_FILES := myfile.c 
LOCAL_LDLIBS += -lOpenSLES 
LOCAL_LDLIBS += -llog 
LOCAL_LDLIBS += -landroid 

include $(BUILD_SHARED_LIBRARY) 

$(call import-module, shared1) 
$(call import-module, shared2)

Trả lời

5

Hãy xem để questio này n: Android JNI APK Packing

Bạn cần phải cung cấp một tên khác cho libs/armeabi/ thư mục để tránh xung đột với NDK xây dựng và thêm đoạn mã sau trước khi tuyên bố include $(CLEAR_VARS):

include $(CLEAR_VARS) 
LOCAL_MODULE:=shared1 
LOCAL_SRC_FILES:=3rdparty_libs/shared1.so 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE:=shared2 
LOCAL_SRC_FILES:=3rdparty_libs/shared2.so 
include $(PREBUILT_SHARED_LIBRARY) 
+0

cảm ơn bạn rất nhiều – xitx

2

Theo tôi được biết, phương pháp đúng là sử dụng ndk-build và không gọi trực tiếp trình biên dịch.

Trong Android.mk, bạn cần chỉ định mô-đun cho từng thư viện tĩnh bạn muốn biên dịch, sau đó chỉ định thư viện được chia sẻ của bạn nên sử dụng nó.

Ví dụ về một tập tin Android.mk sửa đổi của dự án mẫu hello-JNI:

Nếu bạn muốn kiểm soát những mô-đun để biên dịch khi bạn chạy ndk-xây dựng bạn có thể tạo tạo ra một Application.mk nộp (trong cùng thư mục với Android.mk) và liệt kê tất cả các mô-đun như trong ví dụ sau:

APP_MODULES := <module_name_1> <module_name_2> ... <module_name_n> 

tôi nghĩ rằng nó Giúp bạn

+0

Tôi không có mã nguồn của shared1 này và shared2. – xitx

+0

và tôi sử dụng NDK-build để xây dựng thư viện chia sẻ thứ ba. – xitx

+0

ok thì bạn dùng cái gì ..? –

Các vấn đề liên quan