我正在尝试将libraw构建为Android共享库。看起来lib太复杂了,无法与Android.mk等配合使用,或者更好:我还无法做到这一点。

我尝试了使用NDK的独立工具链的方法,但是在编译此lib时遇到了麻烦。

这是我编译lib的路径。请指出我是否犯了明显的错误:

  • 我下载了ndk。
  • 运行:make-standalone-toolchain.sh
  • 在我的bin中添加了该独立工具链的PATH文件夹作为第一项。
  • ./configure运行--host=arm-linux-androideabi。这成功了
  • Ran 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/

    10-13 02:00