我正在尝试将 libraw 构建为 Android 共享库。看起来这个库太复杂,无法与 Android.mk 等一起使用,或者更好:我还没有能力做到这一点。
我尝试了使用 NDK 中的独立工具链的路线,但在编译此库时遇到了困难。
这是我编译库所采用的路径。如果我犯了明显的错误,请指出:
- 我下载了ndk.
- ran:
make-standalone-toolchain.sh
- 添加了
bin
该独立工具链的文件夹作为我的第一项PATH
.
- Ran
./configure
with --host=arm-linux-androideabi
。这成功了
- Ran
make
,这里崩溃得非常快。
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] /cdn-cgi/l/email-protection\" -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] /cdn-cgi/l/email-protection\" -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
我怀疑此错误消息在堆栈溢出时是否有帮助,但我想知道是否应该应用一些额外的标志或配置来使其正常工作?
请注意,如果仅针对我的系统进行编译而不进行交叉编译,我就能够成功编译此库。 (Linux 32 位)。
当我寻找为 Android 构建 GDAL 的说明时(here http://trac.osgeo.org/gdal/wiki/BuildingForAndroid),它使用附加设置LIBS="-lsupc++ -lstdc++"
。这链接了STL和C++异常吗?
但是,当我在运行之前设置这些时configure
我立即收到如下错误:
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
所以,我有点卡住了。有人出主意吗?
我必须添加一个实现swab
函数,因为 NDK 没有这个函数。
后来编译得很好(但我使用了crystax ndk)。
更好的工具方法是只使用Android.mk
归档并使用ndk-build
来编译它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)