ndk编译libiconv

本文详细介绍了在Ubuntu16.04、NDK-17c环境下,如何从源码编译libiconv库,并针对编译过程中出现的链接错误提供了解决方案。通过解压、配置、编译等步骤,最终生成动态库,适用于Android开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译环境:

ubuntu16.04、NDK-17c、libiconv-1.16.tar.gz

 

步骤:

1.将libiconv-1.16.tgr.gz解压并重命名为jni

tar zxvf libiconv-1.16.1.tar.gz
mv libiconv-1.16.1 jni

2.创建Android.mk文件(有版本要求可以创建Application.mk文件)

cd jni
vim Android.mk

复制以下内容到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)

3.生成config.h文件

./configurg

4.make

make

5.编译(release版本)

ndk-build NDK_DEBUG=0

6.编译完成

目录libs下会生成动态库

 

编译过程中出现的错误:

/home/work/android/libiconv-1.16/obj/local/arm64-v8a/objs/iconv/libcharset/lib/localcharset.o: In function `locale_charset':
/home/work/android/libiconv-1.16/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/work/android/libiconv-1.16/obj/local/arm64-v8a/libiconv.so] Error 1

查看localcharset.c文件发现 HAVE_LANGINFO_CODESET 这个宏被打开导致

解决方法:

find . -name "config.h"

将所有config.h中的

#define HAVE_LANGINFO_CODESET 1 改为 #define HAVE_LANGINFO_CODESET 0
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值