0

Android プロジェクトで libjpeg.so を使用したいと考えています。

共有ライブラリをプリコンパイルしました。

私のプロジェクトでスクリプトをビルドします。

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := libjpeg

LOCAL_SRC_FILES :=../lib1/libjpeg.so

include $(PREBUILT_SHARED_LIBRARY)

しかし、私は何を得ますか。

ソースファイル lib1/libjpeg.so - 1 290 798 バイト

libs/armeabi/libjpeg.so をビルドした後のファイル - 247 236 バイト

この 2 つのファイルを分析しました - 2 番目のファイルは切り詰められています

もちろん、「java.lang.UnsatisfiedLinkError」があります

なぜファイルが切り捨てられたのですか?

4

1 に答える 1

1

問題は、NDK ビルド システムがビルド済みの共有ライブラリを宛先フォルダーにコピーするときにすべて削除することです。

本当に libjpeg を共有ライブラリとして使用する必要がある場合は、ポスト ビルド スクリプトを実行して元のファイルを目的のフォルダーにコピーし、削除されたファイルを上書きすることをお勧めします。

最善の解決策は、libjpeg.a スタティック ライブラリを事前にビルドすることです。そうすれば、次のようにストリッピングを回避できます。

include $(CLEAR_VARS)
LOCAL_MODULE := libjpeg
LOCAL_SRC_FILES :=../lib1/libjpeg.a
include $(PREBUILT_STATIC_LIBRARY)

...

include $(CLEAR_VARS)    
LOCAL_MODULE    := mylib
LOCAL_SRC_FILES := mylib.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../lib1/include/
LOCAL_WHOLE_STATIC_LIBRARIES := libjpeg
...
include $(BUILD_SHARED_LIBRARY)

これらのライブラリのストリッピングをオフにする LOCAL_WHOLE_STATIC_LIBRARIES に注意してください。

于 2013-08-29T11:01:35.213 に答える