用独立的工具链android arm构建本地库



我正在尝试构建libraw作为Android共享库。看起来这个库对于Android来说太复杂了。我还没有能力做那件事。

我尝试了使用NDK的独立工具链的路线,但是在编译这个库时我被卡住了。

这是我用来编译这个库的路径。如果有明显的错误,请指出:

    我下载了ndk.
  1. ran: make-standalone-toolchain.sh
  2. 添加了独立工具链的bin文件夹作为我的PATH的第一项。
  3. Ran ./configure with --host=arm-linux-androideabi。这个成功的
  4. 运行make,这里崩溃得非常快。
<>之前LibRaw-0.14.4使美元内部/dcraw_common depbase = '回声。[^/]*$|.deps/&|;s|.lo$||' ';/bin/bash ./libtool——tag=CXX——mode=compile arm-linux-androideabi-g++ -DPACKAGE_NAME="LibRaw" -DPACKAGE_VERSION="0.14.4" -DPACKAGE_STRING="LibRaw " -DPACKAGE_BUGREPORT="info@libraw.org" -DPACKAGE_URL="http://www.libraw.org" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_STRING_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR="。libs/"我。-I/usr/local/include -g -O2 -MT internal/dcraw_common-MD -MP -MF $depbaseTpo -c -o internal/dcraw_common。内部/dcraw_common.cpp &&Mv -f $depbase。房产申诉专员署depbase美元。巴解组织libtool: compile: arm-linux-androideabi-g++ -DPACKAGE_NAME="LibRaw" -DPACKAGE_VERSION="0.14.4" "-DPACKAGE_STRING="LibRaw 0.14.4" -DPACKAGE_BUGREPORT= "info@libraw.org" -DPACKAGE_URL= "http://www.libraw.org" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_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/usr/local/include -g -O2 -MT internal/dcraw_common/.deps/dcraw_common.Tpo -c internal/dcraw_common.cpp -fPIC -DPIC -o internal/.libs/dcraw_common.o内部/dcraw_common.cpp:在成员函数'void LibRaw::read_shorts(ushort*, int)':内部/dcraw_common.cpp:119:错误:'swab'未在此范围内声明在成员函数'void LibRaw::write_ppm_tiff()'中:内部/dcraw_common.cpp:9235:错误:'swab'未在此范围内声明Make: *** [internal/dcraw_common.]错误1之前

我怀疑这个错误信息在stackoverflow这里是有用的,但我想知道我是否应该应用一些额外的标志或配置来让它工作?

注意,如果只是为我的系统编译而没有交叉编译,我就能够成功地编译这个库。(32位linux)。

当我在寻找为Android构建GDAL的指令时(这里),它使用了LIBS="-lsupc++ -lstdc++"的附加设置。这链接STL和c++异常?但是,当我在运行configure之前设置这些时,我立即得到如下错误:

<>之前configure:3018:检查c++编译器是否工作配置:3040:arm-linux-androideabi- c++ 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没有那个。之后这个编译的很好(但是我使用了crystal ndk)。

一个更好的方法是使用Android.mk文件并使用ndk-build来编译它。

链接器错误从你的问题的底部发生,因为make-standalone-toolchain.sh从NDK r7创建不完整的工具链(它错过了一些库,包括libsupc++.a)。我建议您尝试从以前的NDK版本之一(r6b应该很好)制作工具链。

最新更新