2011-12-22 30 views
5

Tôi đang cố gắng xây dựng libraw làm thư viện được chia sẻ trên Android. Dường như lib quá phức tạp để sử dụng với Android.mk, hoặc tốt hơn: tôi không có khả năng làm điều đó.Xây dựng thư viện gốc với cánh tay android toolchain độc lập

Tôi đã thử tuyến đường sử dụng chuỗi công cụ độc lập từ NDK, nhưng tôi gặp khó khăn khi biên soạn lib này.

Đây là đường dẫn tôi thực hiện để biên dịch lib. Vui lòng chỉ ra nếu tôi đang thực hiện các lỗi rõ ràng:

  1. Tôi đã tải xuống ndk.
  2. chạy: make-standalone-toolchain.sh
  3. Thư mục của chuỗi công cụ độc lập như mục đầu tiên trong số PATH.
  4. Ran ./configure với --host=arm-linux-androideabi. Điều này đã thành công
  5. Ran make, tại đây nó bị lỗi rất nhanh.
 
    LibRaw-0.14.4$ make 
    depbase=`echo internal/dcraw_common.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\ 
     /bin/bash ./libtool --tag=CXX --mode=compile arm-linux-androideabi-g++ -DPACKAGE_NAME=\"LibRaw\" -DPACKAGE_TARNAME=\"libraw\" -DPACKAGE_VERSION=\"0.14.4\" -DPACKAGE_STRING=\"LibRaw\ 0.14.4\" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_URL=\"http://www.libraw.org\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I. -I/usr/local/include -g -O2 -MT internal/dcraw_common.lo -MD -MP -MF $depbase.Tpo -c -o internal/dcraw_common.lo internal/dcraw_common.cpp &&\ 
     mv -f $depbase.Tpo $depbase.Plo 
    libtool: compile: arm-linux-androideabi-g++ -DPACKAGE_NAME=\"LibRaw\" -DPACKAGE_TARNAME=\"libraw\" -DPACKAGE_VERSION=\"0.14.4\" "-DPACKAGE_STRING=\"LibRaw 0.14.4\"" -DPACKAGE_BUGREPORT=\"[email protected]\" -DPACKAGE_URL=\"http://www.libraw.org\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I. -I/usr/local/include -g -O2 -MT internal/dcraw_common.lo -MD -MP -MF internal/.deps/dcraw_common.Tpo -c internal/dcraw_common.cpp -fPIC -DPIC -o internal/.libs/dcraw_common.o 
    internal/dcraw_common.cpp: In member function 'void LibRaw::read_shorts(ushort*, int)': 
    internal/dcraw_common.cpp:119: error: 'swab' was not declared in this scope 
    internal/dcraw_common.cpp: In member function 'void LibRaw::write_ppm_tiff()': 
    internal/dcraw_common.cpp:9235: error: 'swab' was not declared in this scope 
    make: *** [internal/dcraw_common.lo] Error 1 

tôi nghi ngờ thông báo lỗi này là hữu ích ở đây tại stackoverflow, nhưng tôi lại tự hỏi nếu tôi nên đã áp dụng một số cờ bổ sung hoặc cấu hình để có được điều này để làm việc?

Lưu ý rằng tôi có thể biên dịch thành công lib này nếu chỉ biên dịch cho hệ thống của tôi mà không cần crosscompiling. (linux 32bit).

Khi tôi tìm hướng dẫn để xây dựng GDAL cho Android (here), nó sử dụng cài đặt bổ sung là LIBS="-lsupc++ -lstdc++". Điều này liên kết các ngoại lệ STL và C++? Tuy nhiên, khi tôi đặt những trước khi chạy tôi configure tôi nhận được ngay lập tức các lỗi như:

 
configure:3018: checking whether the C++ compiler works 
configure:3040: arm-linux-androideabi-g++ conftest.cpp -lsupc++ -lstdc++ >&5 
/tmp/android-chain/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: cannot find -lsupc++ 
collect2: ld returned 1 exit status 

Vì vậy, tôi là một chút khó khăn. Ai đó là một ý tưởng?

Trả lời

4

Tôi phải thêm triển khai chức năng swab, vì NDK không có chức năng đó. Sau đó tiền phạt biên dịch này (nhưng tôi đã sử dụng crystax ndk).

Cách tốt hơn theo cách công cụ là chỉ sử dụng tệp Android.mk và sử dụng ndk-build để biên dịch.

+0

Hi @Peterdk bạn có thể cho tôi biết nơi bạn đã thực hiện chức năng tăm bông không? hay bạn tự viết nó? – asloob

+0

Xin chào, tôi nghĩ rằng tôi chỉ googled cho nó. Tôi không tự viết. Có lẽ cũng kết hợp nó với một tìm kiếm cho crystax. – Peterdk

+0

Cảm ơn! Tôi tìm thấy nó. – asloob

2

Lỗi trình kết nối từ cuối câu hỏi của bạn xảy ra vì make-standalone-toolchain.sh từ NDK r7 tạo chuỗi công cụ không đầy đủ (nó bỏ qua một số thư viện bao gồm libsupc++.a). Tôi khuyên bạn nên thử tạo một chuỗi công cụ từ một trong các bản phát hành NDK trước đó (r6b sẽ ổn).

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