在编译一个安卓NDK开源项目时,出现了 error: undefined reference to '__dso_handle'的错误。
本次编译采用NDK中的交叉编译器进行,没有使用NDK-BUILD的工具。
百度谷歌后,发现__dso_handle是glibc的一个函数,有诸如增加extern C{ void * __dso_handle = 0 ;}这样的解决办法。
但在本项目中,有一些不可修改的.a也报这个错误,所以认定本次问题为编译问题。然后查找NDK文档,在
USING THE ANDROID TOOLCHAIN AS A STANDALONE COMPILER
一节中,讲述了在编译时,要设置SYSROOT,所以在Makefile中,增加如下修改,问题解决。--其中红色部分为新增CC := $(ANDROID_NDK_HOME)/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc --sysroot=$(SYSROOT)
GCC := $(ANDROID_NDK_HOME)/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-g++--sysroot=$(SYSROOT)