У меня возникли проблемы с получением minizip для работы на Android. Сначала я попытался связать его как статическую с моей общей библиотекой приложений. Однако, как только я использовал код из этой библиотеки minizip, я получил 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
Как вы видите, minizip терпит неудачу. но почему? У меня действительно нет подсказки. Компиляция без усилий, никаких проблем нет. Я подозреваю, что он полагается на некоторые вещи, которые у Android нет или более свежие.
Что касается компиляции, то у меня есть только эти параметры компоновщика, которые являются теми же самыми для 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
Довольно глупо!
Поскольку Android не поддерживает fseeko64, minizip не будет правильно связываться. Я искал определение, чтобы обойти это и найти его;
USE_FILE32API
Задача решена!