Compling libiconv as static library using ndk-build

2,610 views
Skip to first unread message

CHDevelop

unread,
May 15, 2012, 4:37:35 AM5/15/12
to android-ndk
I'm trying to compile the libiconv 1.14 into a static library on
Cygwin using ndk-build. After configuring the library, I'm able to
create successfully a shared library using the following Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES := lib/iconv.c \
libcharset/lib/localcharset.c \
lib/relocatable.c

LOCAL_C_INCLUDES += $(LOCAL_PATH)/include \
$(LOCAL_PATH)/libcharset \
$(LOCAL_PATH)/libcharset/include

LOCAL_CFLAGS := \
-DLIBDIR=\"\"

LOCAL_MODULE:= iconv

include $(BUILD_SHARED_LIBRARY)


However, if I replace BUILD_SHARED_LIBRARY with BUILD_STATIC_LIBRARY,
nothing happens and I get:

$ ../../ndk-build V=1
rm -f ./libs/armeabi/lib*.so ./libs/armeabi-v7a/lib*.so ./libs/x86/
lib*.so
rm -f ./libs/armeabi/gdbserver ./libs/armeabi-v7a/gdbserver ./libs/x86/
gdbserver
rm -f ./libs/armeabi/gdb.setup ./libs/armeabi-v7a/gdb.setup ./libs/x86/
gdb.setup
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
mkdir -p ./libs/armeabi
install -p /cygdrive/c/Android/android-ndk-r7b/toolchains/arm-linux-
androideabi-4.4.3/prebuilt/gdbserver ./libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
mkdir -p ./libs/armeabi
/cygdrive/c/Android/android-ndk-r7b/prebuilt/windows/bin/echo "set
solib-search-path ./obj/local/armeabi" > ./libs/armeabi/gdb.setup
/cygdrive/c/Android/android-ndk-r7b/prebuilt/windows/bin/echo
"directory C:/Android/android-ndk-r7b/platforms/android-3/arch-arm/usr/
include jni/include jni/libcharset jni/libcharset/include C:/Android/
android-ndk-r7b/sources/cxx-stl/system" >> ./libs/armeabi/gdb.setup


Any idea why the static library isnt compiled?

Bakcsi Zsolt

unread,
May 15, 2012, 5:10:12 AM5/15/12
to andro...@googlegroups.com
On Tue, May 15, 2012 at 10:37 AM, CHDevelop <chofim....@gmail.com> wrote:
> However, if I replace BUILD_SHARED_LIBRARY with BUILD_STATIC_LIBRARY,
> nothing happens and I get:
>
> Any idea why the static library isnt compiled?

Seems like static libraries won't build unless a dependency is specified.
I found 2 solutions:

1. Add a (fake) project to the end of Android.mk which depends on iconv:
include $(CLEAR_VARS)
LOCAL_MODULE := trick
LOCAL_STATIC_LIBRARIES := iconv
include $(BUILD_SHARED_LIBRARY)

OR

2. Create Application.mk (if you don't have one) and add this line:
APP_MODULES := iconv

But may be there is a nicer solution.

Zsolt

CHDevelop

unread,
May 15, 2012, 5:32:31 AM5/15/12
to android-ndk
Thanks a lot - the second solution worked like magic!

Adam Kim

unread,
May 23, 2012, 11:03:26 AM5/23/12
to andro...@googlegroups.com
Hi!
I have a problem building iconv in android-ndk
I did it as you said but made many errors when building.
The following is what I did.

1. downloaded libiconv-1.14.tar.gz from http://www.gnu.org/software/libiconv/.
2. extracted to d:/testLibIconv/jni/
4. succeeded in ./configure & make & make install in cygwin.
3. made Application.mk and Android.mk in d:/testLibIconv/jni

- in Application.mk

APP_ABI := armeabi-v7a
APP_OPTIM := debug
APP_STL := gnustl_static
APP_CPPFLAGS := -fexceptions -frtti

- in Android.mk


LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES := lib/iconv.c \
libcharset/lib/localcharset.c \
lib/relocatable.c

LOCAL_C_INCLUDES += $(LOCAL_PATH)/include \
$(LOCAL_PATH)/libcharset \
$(LOCAL_PATH)/libcharset/include

LOCAL_CFLAGS := \
-DLIBDIR=\"\"

LOCAL_MODULE:= iconv

include $(BUILD_SHARED_LIBRARY)


3. In cygwin,
 $ cd /cygdrive/d:/testLibIconv/jni
 $ ndk-build

but so many errors occured.
Did I miss something?
I am using android-ndk-r8.

I am working with it for four days.
Please Help me.

Thank you,
Best Regards,
Adam.

2012년 5월 15일 화요일 오후 4시 37분 35초 UTC+8, CHDevelop 님의 말:
Reply all
Reply to author
Forward
0 new messages