编译环境:
ubuntu-20.04.4 NDK-r21e libiconv-1.16.tar.gz
步骤:
1、下载android-ndk-r21e-linux-x86_64.zip
wget https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip
2、解压android-ndk-r21e-linux-x86_64.zip
unzip android-ndk-r21e-linux-x86_64.zip
3、配置NDK环境变量:
打开/etc/profile文件
sudo vi /etc/profile
最后加入环境变量
export NDK_HOME=/home/awa/android-ndk-r21e export PATH=$PATH:$NDK_HOME
让/etc/profile文件生效
source /etc/profile
检查安装是否成功
ndk-build -v
返回
1、下载libiconv-1.16.tar.gz
wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz
2、解压
tar zxvf libiconv-1.16.tar.gz
3.修改文件夹的名称jni
mv libiconv-1.16 jni
三、创建Android.mk文件
1.进入jni创建Android.mk文件
cd jni vi Android.mk
2、在Android.mk写入内容后保存
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libiconv LOCAL_CFLAGS := \ -Wno-multichar \ -DANDROID \ -DLIBDIR="c" \ -DBUILDING_LIBICONV \ -DIN_LIBRARY LOCAL_SRC_FILES := \ libcharset/lib/localcharset.c \ lib/iconv.c \ lib/relocatable.c LOCAL_C_INCLUDES = \ $(LOCAL_PATH)/include \ $(LOCAL_PATH)/libcharset \ $(LOCAL_PATH)/lib \ $(LOCAL_PATH)/libcharset/include \ $(LOCAL_PATH)/srclib #编译动态库 include $(BUILD_SHARED_LIBRARY) #编译静态库 #include $(BUILD_STATIC_LIBRARY)
四、生成config.h文件
./configure
五、make
make
六、编译
ndk-build NDK_DEBUG=0
根目录成功后libs将生成动态库
/home/awa/obj/local/arm64-v8a/objs/iconv/libcharset/lib/localcharset.o: In function `locale_charset': /home/awa/jni/libcharset/lib/localcharset.c:696: undefined reference to `nl_langinfo' clang : error: linker command failed with exit code 1 (use -v to see invocation) make: *** [/home/awa/android-ndk-r21e/build/core/build-binary.mk:725: /home/awa/obj/local/arm64-v8a/libiconv.so] Error 1
查看localcharset.c文件发现HAVE_LANGINFO_CODESET 宏被打开
搜索config.h
find . -name "config.h"
将所有config.h中的
#define HAVE_LANGINFO_CODESET 1
改为
#define HAVE_LANGINFO_CODESET 0