无法在jni / ndk共享库中链接libjpeg.so

时间:2011-03-06 05:03:13

标签: android java-native-interface android-ndk libjpeg

部屋, 我在构建我开发的ndk / jni共享库时遇到了问题。我希望重用随平台一起提供的libjpeg(/system/lib/libjpeg.so)但是我无法将其链接起来。当我构建我的共享库时,我得到了......

/home/blink/workspace_android2/HackBitmapJNI/jni/jnijpeg/JNIBmp.cpp:94: undefined reference to `jpeg_std_error(jpeg_error_mgr*)'
/home/blink/workspace_android2/HackBitmapJNI/jni/jnijpeg/JNIBmp.cpp:96: undefined reference to `jpeg_CreateDecompress(jpeg_decompress_struct*, int, unsigned int)'
/home/blink/workspace_android2/HackBitmapJNI/jni/jnijpeg/JNIBmp.cpp:98: undefined reference to `jpeg_stdio_src(jpeg_decompress_struct*, __sFILE*)'
/home/blink/workspace_android2/HackBitmapJNI/jni/jnijpeg/JNIBmp.cpp:100: undefined reference to `jpeg_read_header(jpeg_decompress_struct*, int)'
/home/blink/workspace_android2/HackBitmapJNI/jni/jnijpeg/JNIBmp.cpp:102: undefined reference to `jpeg_start_decompress(jpeg_decompress_struct*)'
/home/blink/workspace_android2/HackBitmapJNI/jni/jnijpeg/JNIBmp.cpp:124: undefined reference to `jpeg_read_scanlines(jpeg_decompress_struct*, unsigned char**, unsigned int)'
/home/blink/workspace_android2/HackBitmapJNI/jni/jnijpeg/JNIBmp.cpp:130: undefined reference to `jpeg_destroy_decompress(jpeg_decompress_struct*)'
collect2: ld returned 1 exit status
make: *** [/home/blink/workspace_android2/HackBitmapJNI/obj/local/armeabi/libjnijpeg.so] Error 1*

基本上每个符号我都需要在运行时解析libjpeg.so ...

我已将libjpeg.so从我的模拟器复制到'lib'下的项目目录中。当我在libjpeg.so的副本上运行'arm-eabi-readelf -s'时,我可以看到所有上面的符号都定义了(我看不到方法签名..只是名称..有没有办法转储签名/命名空间??)

我的Android.mk如下......

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_C_INCLUDES := /opt/android_src/dalvik/libnativehelper/include/nativehelper \
                    /opt/android_src/frameworks/base/include \
                    /opt/android_src/system/core/include \
                    /opt/android_src/dalvik/libnativehelper/include \
                    /opt/android_src/external/stlport/stlport \
                    /opt/android_src/external/jpeg \
                    /opt/android_src/bionic
LOCAL_LDFLAGS += -Llib 
LOCAL_MODULE    := jnijpeg
LOCAL_SRC_FILES := JNIBmp.cpp 
LOCAL_LDLIBS    := -lm -llog -ljpeg -landroid_runtime 


include $(BUILD_SHARED_LIBRARY) 

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

尝试以这种形式使用#include:

extern "C" {
#include "jpeglib.h"
}

它对我有用。

祝你好运!

答案 1 :(得分:1)

我能够使用以下内容链接-ljpeg:

LOCAL_LDLIBS:= -L $(MYDROID)/ out / target / product / generic / system / lib / -ljpeg