Невозможно построить общую библиотеку со статическими библиотеками - PullRequest
0 голосов
/ 01 августа 2011

Я не могу собрать общую библиотеку со статическими библиотеками.
Я загрузил некоторый код из Интернета, и я пытаюсь сделать его как библиотеку для моего проекта Android, но я не могу создать общие библиотеки для него.

Пожалуйста, найдите мой файл Android.mk ниже

LOCAL_PATH := $(call my-dir)
MY_PATH := $(LOCAL_PATH)

include $(CLEAR_VARS)
LOCAL_CFLAGS := -DFIXED_POINT -DEXPORT=""
LOCAL_EXPORT_LDLIBS := -llog
LOCAL_MODULE := dspmath
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include $(LOCAL_PATH)/code $(LOCAL_PATH)/dsp_fx \
$(LOCAL_PATH)/dspmath $(LOCAL_PATH)/ttylib
LOCAL_SRC_FILES := \
dspmath/ehwutl.c    dspmath/mathadv.c   dspmath/mathevrc.c \
dspmath/globdefs.c  dspmath/mathdp31.c
include $(BUILD_SHARED_LIBRARY)



include $(CLEAR_VARS)
LOCAL_CFLAGS := -DFIXED_POINT -DEXPORT=""
LOCAL_MODULE := dsp_fx
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include $(LOCAL_PATH)/code $(LOCAL_PATH)/dsp_fx \
$(LOCAL_PATH)/dspmath $(LOCAL_PATH)/ttylib
LOCAL_SRC_FILES := \
dsp_fx/basic_op.c    dsp_fx/lib_wmp_fx.c  dsp_fx/math_adv40.c  dsp_fx/math_ext40.c \
dsp_fx/basic_op40.c  dsp_fx/math_adv.c    dsp_fx/math_ext32.c
include $(BUILD_SHARED_LIBRARY)



include $(CLEAR_VARS)
LOCAL_CFLAGS := -DFIXED_POINT -DEXPORT=""
LOCAL_MODULE := ttylib
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include $(LOCAL_PATH)/code $(LOCAL_PATH)/dsp_fx \
$(LOCAL_PATH)/dspmath $(LOCAL_PATH)/ttylib
LOCAL_SRC_FILES := \
ttylib/bdo2dit.c   ttylib/tty_char.c  ttylib/tty_gen.c   ttylib/ttystate.c \
ttylib/dit2a.c     ttylib/tty_dbg.c   ttylib/tty_glob.c \
ttylib/tone_gen.c  ttylib/tty_dec.c   ttylib/tty_hdr.c \
ttylib/tty_bit.c   ttylib/tty_enc.c   ttylib/tty_rate.c
include $(BUILD_SHARED_LIBRARY)




include $(CLEAR_VARS)
LOCAL_CFLAGS := -DFIXED_POINT -DEXPORT=""
LOCAL_EXPORT_LDLIBS := -llog
LOCAL_MODULE := code
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include $(LOCAL_PATH)/code $(LOCAL_PATH)/dsp_fx \
$(LOCAL_PATH)/dspmath $(LOCAL_PATH)/ttylib
LOCAL_SRC_FILES := \
code/a2lsp.c     code/convh.c     code/fcbgq.c     code/inv_sqrt.c  code/putacbc.c \
code/acb_ex.c    code/cshift.c    code/fer.c       code/lpcana.c    code/r_fft.c \
code/acelp_pf.c  code/d3_10pf.c   code/filter.c    code/lsp2a.c     code/rda.c \
code/apf.c       code/d8_35pf.c   code/fndppf.c    code/lspmaq.c    code/rom.c \
code/auto.c      code/d_fer.c     code/getext1k.c  code/main.c      code/synfltr.c \
code/bitpack.c   code/d_globs.c   code/getgain.c   code/maxeloc.c   code/w2res.c \
code/bitupack.c  code/d_no_fer.c  code/getopt.c    code/mdfyorig.c  code/weight.c \
code/bl_intrp.c  code/d_rate_1.c  code/getres.c    code/mod.c       code/zeroinpt.c \
code/bqiir.c     code/decode.c    code/globs.c     code/ns127.c \
code/c3_10pf.c   code/durbin.c    code/impulser.c  code/pit_shrp.c \
code/c8_35pf.c   code/e_globs.c   code/interpol.c  code/pktoav.c \
code/comacb.c    code/encode.c    code/intr_cos.c  code/pre_enc.c
include $(BUILD_SHARED_LIBRARY)


LOCAL_PATH := $(MY_PATH)
include $(CLEAR_VARS)
LOCAL_CFLAGS := -DFIXED_POINT -DEXPORT=""
LOCAL_MODULE := evrc
LOCAL_SHARED_LIBRARIES := dspmath code dsp_fx ttylib
include $(BUILD_SHARED_LIBRARY)

После выполнения вышеуказанного файла make я получаю вывод в папке diff, как этот
1) Указанный выше файл make находится в папке $ (PROJECT) / jni
2) Файлы Outpur генерируются в $ (PROJECT) / obj / local / armeabi

-rwxr-xr-x+ 1 TPRM73 Domain Users 468K Aug  1 17:40 libcode.a
-rwxr-xr-x+ 1 TPRM73 Domain Users  80K Aug  1 17:40 libdsp_fx.a
-rwxr-xr-x+ 1 TPRM73 Domain Users  73K Aug  1 17:40 libdspmath.a
-rwxr-xr-x+ 1 TPRM73 Domain Users 3.6K Aug  1 17:41 libevrc.so
-rwxr-xr-x+ 1 TPRM73 Domain Users 101K Aug  1 17:41 libttylib.a
drwxr-xr-x+ 1 TPRM73 Domain Users    0 Aug  1 17:40 objs

Если вы наблюдаете размер libevrc.so, то он составляет 3,6 КБ, что меньше, чем у статических библиотек. Пожалуйста, помогите мне решить вышеуказанную проблему. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Спасибо и всего наилучшего,
SSuman185

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

Мы должны использовать LOCAL_WHOLE_STATIC_LIBRARIES вместо LOCAL_STATIC_LIBRARIES, чтобы избежать удаления неиспользуемых функций, чтобы вся статическая библиотека была загружена в общую библиотеку.

Этоэто основной ответ, который я получил от Google.Кто-нибудь, пожалуйста, добавьте больше информации, если они знают.

0 голосов
/ 18 июля 2014

[Дханавель]: Вы правы !!

Я также столкнулся с подобной проблемой.После замены LOCAL_STATIC_LIBRARIES на LOCAL_WHOLE_STATIC_LIBRARIES произошло связывание, и был создан окончательный .so.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...