我正在尝试将libraw构建为Android共享库。看起来lib太复杂了,无法与Android.mk等配合使用,或者更好:我还无法做到这一点。
我尝试了使用NDK的独立工具链的方法,但是在编译此lib时遇到了麻烦。
这是我编译lib的路径。请指出我是否犯了明显的错误:
make-standalone-toolchain.sh
bin
中添加了该独立工具链的PATH
文件夹作为第一项。 ./configure
运行--host=arm-linux-androideabi
。这成功了make
,它崩溃非常快。 LibRaw-0.14.4 $使
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 =\“。”。 -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:编译: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内部/dcraw_common.lo -MD -MP -MF内部/.deps/dcraw_common.Tpo -c内部/dcraw_common.cpp -fPIC -DPIC -o内部/.libs/dcraw_common.o
internal/dcraw_common.cpp:在成员函数'void LibRaw::read_shorts(ushort *,int)'中:
internal/dcraw_common.cpp:119:错误:未在此作用域中声明'swab'
internal/dcraw_common.cpp:在成员函数'void LibRaw::write_ppm_tiff()'中:
internal/dcraw_common.cpp:9235:错误:未在此范围中声明'swab'
make:*** [internal/dcraw_common.lo]错误1
我怀疑此错误消息是否对stackoverflow有用,但我想知道是否应该应用一些其他标志或配置来使其正常工作?
请注意,如果仅针对我的系统进行编译而无需交叉编译,则能够成功编译该lib。 (Linux 32位)。
当我查看有关为Android构建GDAL的说明(here)时,它使用了
LIBS="-lsupc++ -lstdc++"
的其他设置。这链接了STL和C++异常吗?但是,当我在运行
configure
之前进行设置时,会立即收到类似以下的错误:配置:3018:检查C++编译器是否正常工作
配置: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:找不到-lsupc++
collect2:ld返回1退出状态
所以,我有点卡住了。有人有主意吗?
最佳答案
我必须添加swab
函数的实现,因为NDK没有该实现。
之后,这个编译很好(但是我使用了crystax ndk)。
一种更好的工具方式是只使用Android.mk
文件并使用ndk-build
对其进行编译。
关于android - 使用独立工具链android arm构建 native 库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8606044/