Неспособность связаться с libjpeg.so в общей библиотеке jni / ndk - PullRequest
3 голосов
/ 06 марта 2011

Хэя, У меня проблемы с созданием общей библиотеки 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'. Когда я запускаю 'arm-eabi-readelf -s' для этой копии libjpeg.so, я вижу все указанные выше символы (я не вижу сигнатуры методов ... просто имена ... есть ли способ вывести сигнатуры / Пространства имен ??) * +1006 *

Мой 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 ]

2 голосов
/ 28 сентября 2011

Попробуйте использовать #include в этой форме:

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

Это сработало для меня.

Удачи!

1 голос
/ 14 марта 2011

Мне удалось связать с -ljpeg, используя следующее:

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

...