Tôi đang làm việc với Android NDK r6b dưới cygwin (hệ thống được cập nhật chính xác). Tôi đang sửa đổi mẫu hello-jni để học cách làm việc với NDK. Vì tôi có một thư viện được viết bằng C++ mà tôi muốn sử dụng trong hello-jni (thực ra, tôi đã tạo một prj tên là helloworld với một tệp .cpp đơn gọi là ndkfoo.cpp), tôi đã tạo một dự án Android mới trong Eclipse (được cập nhật cho Android), đã thêm thư mục jni, đã thêm tệp Android.mk và Application.mk, đã chỉnh sửa chúng để biên dịch tệp .cpp. Khi kết thúc quá trình biên dịch, tôi có được một tệp .so.Android NDK - sự cố khi liên kết thư viện bên ngoài (không thể tìm thấy nó)
Bây giờ, trong helloworld Android.mk, tôi cần thực hiện một số chỉnh sửa để yêu cầu trình liên kết đưa vào thư viện đó. Giả sử các tập tin thư viện là libmylib.so, tôi đã kịch bản android.mk sau:
LOCAL_PATH: = $ (gọi my-dir)
bao gồm $ (CLEAR_VARS)
LOCAL_MODULE: = ndkfoo
LOCAL_SRC_FILES: = ndkfoo.cpp
LOCAL_C_INCLUDES + = $ (LOCAL_PATH)/mylib
LOCAL_LDLIBS + = -L $ (LOCAL_PATH) /../../ mylib/libs/armeabi/-lmylib
bao gồm $ (BUILD_SHARED_LIBRARY)
thư mục My được tổ chức theo cách sau:
d:/android/android-ndk-r6b => android ndk root
d:/android/workspace/helloworld => helloworld project
d:/android/workspace/mylib => mylib project library
(do đó, đường dẫn đến libmylib.so là: d:/android/workspace/mylib/libs/armeabi).
Thật không may, điều này dường như không hoạt động. Nếu tôi xóa mọi tham chiếu đến mylib từ ndkfoo.cpp, nó sẽ biên dịch và chạy ngay cả trên điện thoại của tôi. Nếu tôi không loại bỏ các tham chiếu tới mylib, nó biên dịch nhưng doens't liên kết: tôi có được kết quả sau:
D: /android/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4. 3/prebuilt/windo ws/bin /../ lib/gcc/arm-linux-androideabi/4.4.3 /../../../../ arm-linux-androideabi/ bin/ld. exe: không thể tìm thấy -lmylib
Ps. Tôi quên đề cập đến rằng tôi chạy ndk-buld trong thư mục jni của dự án helloworld. Pss. Tôi đã tìm thấy rất nhiều câu hỏi tương tự trên internet. Tôi đã luôn luôn làm việc với Visual C/C++ IDE, vì vậy tôi thực sự mới để GCC, makefiles và vân vân ...
Ok, tìm cách giải quyết vấn đề này. Đối với một số lý do lạ mà tôi không hiểu, đường dẫn được chỉ định là -L/cygdrive/d/android/không gian làm việc/mylib/libs/armeabi không hoạt động (và đây là lý do tại sao việc sử dụng kết quả LOCAL_PATH bị lỗi). Thay vào đó, sử dụng -Ld:/android/workspace/mylib/libs/armeabi hoặc -L ../../ mylib/libs/armeabi không hoạt động. Tôi cho rằng cygwin là vấn đề ở đây ... – Luke
đăng bình luận của bạn như là câu trả lời nếu nó giải quyết vấn đề của bạn –