2011-01-04 46 views
13

Tôi đang gói NDK gốc cho Android.Không thể tìm thấy tệp tiêu đề - Android NDK

Nhưng khi xây dựng, nó không tìm thấy tệp tiêu đề.

Tôi có cấu trúc sau.

dự án/JNI

Android.mk

LOCAL_PATH := $(call my-dir) 

include $(call all-subdir-makefiles) 

LOCAL_PATH :=/home/marcos/dev/workspace/rmsdk.native.wraper/jni 

include $(CLEAR_VARS) 

LOCAL_LDLIBS := -llog 
LOCAL_MODULE := ndk1 
LOCAL_SRC_FILES := native.c DelegateDRMProcessorClient.cpp 
LOCAL_STATIC_LIBRARY := adept cryptopenssl dp expat fonts hobbes jpeg mschema png t3 xml zlib 

include $(BUILD_SHARED_LIBRARY) 

dự án/JNI/prereqs/

Android.mk (Dùng để gọi tất cả subdirs file Android.mk)

LOCAL_PATH := $(call my-dir) 
include $(call all-subdir-makefiles) 
include $(CLEAR_VARS) 

dự án/jni/prereqs /% lib%/

Android.mk

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE :=dp 
LOCAL_SRC_FILES :=libdp.a 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include 

include $(PREBUILT_STATIC_LIBRARY) 

Và có thư mục bao gồm trên mỗi thư mục% lib%.

Khi sử dụng ndk-build tôi nhận được một "/home/marcos/dev/workspace/rmsdk.native.wraper/jni/DelegateDRMProcessorClient.h:18:20: lỗi: dp_all.h: Không có tập tin hoặc thư mục "

Bất kỳ ai cũng biết cách đưa các tiêu đề này vào trình biên dịch?

+1

đường dẫn nơi dp_all.h nằm ở đâu? –

+0

project/jni/prereqs/dp/bao gồm –

+0

@Marcos, bạn có muốn chia sẻ cách bạn đã nhập các thư viện tĩnh "font cryptopenssl dp expat chuyên nghiệp không. Jpeg mschema png t3 xml zlib" ?? Tôi muốn nhập một số thư viện nhưng tôi gặp khó khăn. Ví dụ, làm thế nào bạn biên dịch zlib để nhập nó ở đây? – Tiago

Trả lời

15

tôi giải quyết nó, nhận được tất cả các tiêu đề trong một thư mục và bao gồm các dòng sau trong Android.mk

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include-all 

này hoạt động, nhưng không trông giống như phương pháp tốt nhất.

12

tôi là một chút muộn để bên này, nhưng chạy vào cùng một vấn đề và có thể có một câu trả lời cho bình luận của bạn: "này hoạt động, nhưng không trông giống như phương pháp tốt nhất"

Có; sa mẫu trong NDK được gọi là "mô-đun xuất" Nó cho thấy cách xây dựng một tệp Android.mk để tôn trọng các tệp tiêu đề sống trong các thư mục thích hợp của chúng chứ không phải tất cả được đưa vào một thư mục bao gồm.

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := foo 
LOCAL_SRC_FILES := foo/foo.c 
LOCAL_CFLAGS := -DFOO=2 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo 
LOCAL_EXPORT_CFLAGS := -DFOO=1 
LOCAL_EXPORT_LDLIBS := -llog 
include $(BUILD_STATIC_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := bar 
LOCAL_SRC_FILES := bar/bar.c 
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar 
LOCAL_STATIC_LIBRARIES := foo 
include $(BUILD_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := zoo 
LOCAL_SRC_FILES := zoo/zoo.c 
LOCAL_SHARED_LIBRARIES := bar 
include $(BUILD_SHARED_LIBRARY) 
+0

cũng hoạt động với một tệp Android.mk duy nhất, recursivelly được trả lời trong một câu hỏi khác của riêng tôi –

+1

Bạn có thể bao gồm liên kết đến câu trả lời bạn đã đề cập không? –

3

Nhiều năm sau ...

Để xuất bao gồm thư mục thay vì các tập tin cá nhân, tôi sử dụng như sau:

LOCAL_EXPORT_C_INCLUDE_DIRS := $(MY_DIRECTORY_PATH) 

Ví dụ, đối với câu hỏi ở trên xuất khẩu cho "foo "trông giống như:

LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/foo 
+0

"LOCAL_EXPORT_C_INCLUDES: =" – DevByStarlight

+0

Cảm ơn bạn Starlight. Có vẻ như các quy tắc xây dựng đã được cập nhật. Bạn luôn có thể thay đổi câu trả lời vì bạn đã kiểm tra quy tắc mới hơn. _DIRS làm việc cho tôi vào thời điểm đó. –

1

Để thuận tiện cho người mới, tôi chỉ muốn thêm thao tác đó vào tất cả tiêu đề của bạn các tệp trong thư mục được LOCAL_C_INCLUDES giới thiệu: = $ (LOCAL_PATH) và sau đó lưu android.mk và khởi động lại nhật thực. Sau khi thử tất cả các giải pháp trên, điều đó đã hiệu quả với tôi.

+0

Sự cố ở đây mô tả trường hợp bạn có tiêu đề trên nhiều thư mục con, bạn có thể thêm tất cả .h vào một thư mục và quá trình nhập sẽ hoạt động như thực tế. –

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