Не удается загрузить мини-код в Android JNI.не удалось связать libminizip.so - PullRequest
1 голос
/ 29 февраля 2012

У меня проблемы с получением минизипа для работы на Android. Сначала я попытался связать его как статический с общей библиотекой приложения. Однако, как только я использовал код из этой мини-библиотеки, я получил UnsatisfiedLinkError. У меня есть несколько других библиотек, которые работают, libzip и libpng. Поэтому для сравнения я скомпилировал все три в разделяемые библиотеки и использовал System.loadLibrary ("libpng"); System.loadLibrary ( "libzip"); System.loadLibrary ( "minizip"); загрузить их перед применением.

LogCat выводит это:

02-28 21:12:23.371: D/dalvikvm(21023): Trying to load lib /data/data/com.flotsamworks.seadrift/lib/liblibpng.so 0x4a315c18 02-28 21:12:23.381: D/dalvikvm(21023): Added shared lib /data/data/com.flotsamworks.seadrift/lib/liblibpng.so 0x4a315c18 02-28 21:12:23.381: D/dalvikvm(21023): No JNI_OnLoad found in /data/data/com.flotsamworks.seadrift/lib/liblibpng.so 0x4a315c18, skipping init 02-28 21:12:23.411: D/dalvikvm(21023): Trying to load lib /data/data/com.flotsamworks.seadrift/lib/liblibzip.so 0x4a315c18 02-28 21:12:23.421: D/dalvikvm(21023): Added shared lib /data/data/com.flotsamworks.seadrift/lib/liblibzip.so 0x4a315c18 02-28 21:12:23.431: D/dalvikvm(21023): No JNI_OnLoad found in /data/data/com.flotsamworks.seadrift/lib/liblibzip.so 0x4a315c18, skipping init 02-28 21:12:23.431: D/dalvikvm(21023): Trying to load lib /data/data/com.flotsamworks.seadrift/lib/libminizip.so 0x4a315c18 02-28 21:12:23.451: I/dalvikvm(21023): Unable to dlopen(/data/data/com.flotsamworks.seadrift/lib/libminizip.so): Cannot load library: link_image[2033]: failed to link libminizip.so

Как видите, минизип не работает. но почему? Я действительно понятия не имею. Компиляция не требует никаких проблем. Я подозреваю, что он полагается на некоторые вещи, которых нет у Android, или на более свежую версию libz.

Что касается компиляции, у меня есть только те параметры компоновщика, которые одинаковы для libzip и libpng. -shared -Wl, - fix-cortex-a8 -lz

Я загрузил проект, если вы хотите взглянуть на make-файлы и код. Я кодирую / это код .... в build / android8_gmake / вы можете найти build.sh, настроить три пути к gcc, g ++ и ar. В ./debug/bin вы найдете уже созданные общие объекты, которые я использовал.

http://projects.woutervandongen.com/thirdparty_sharedlibs_28_2_12.zip

Я использую NDKr7b с пользовательским набором инструментов, сгенерированным: make-standalone-toolchain.sh --platform = android-8 --install-dir =. / standalone-toolchain-api8

Пожалуйста, помогите

С уважением,

Wouter

1 Ответ

2 голосов
/ 27 марта 2012

Довольно глупо!

Поскольку Android не поддерживает fseeko64, minizip не будет правильно связываться. Я искал определение, чтобы обойти это и нашел, что это;

USE_FILE32API

Проблема решена!

...