Возможно ли связать платформы \ android-XX \ arch-arm \ usr \ lib * .a версии библиотек при использовании системы сборки NDK Cmake с Android Studio? Я использую LLVM набор инструментов и Android NDK 13.Связывание статических библиотек libm.a или libc.a с NDK cmake
Я пробовал изменения на образце приложения, изменяя файл: https://github.com/googlesamples/android-ndk/blob/master-cmake/hello-jni/app/src/main/cpp/CMakeLists.txt
С следующие изменения (добавление libm.a):
target_link_libraries(hello-jni libm.a android log)
Сборки успешно , но readelf -d показывает, что libm.so все еще связаны между собой:
0x00000001 (NEEDED) Shared library: [libandroid.so]
0x00000001 (NEEDED) Shared library: [liblog.so]
0x00000001 (NEEDED) Shared library: [libm.so]
0x00000001 (NEEDED) Shared library: [libdl.so]
0x00000001 (NEEDED) Shared library: [libc.so]
При добавлении также libc.a становится хуже, здание не может:
Error:error: relocation overflow in R_ARM_THM_JUMP11
Error:error: linker command failed with exit code 1 (use -v to see invocation)
BTW, иногда я вижу только последнюю ошибку без каких-либо объяснений (например, при названии библиотеки ошибок). Должен ли я установить флаг -v, чтобы увидеть подробности? Как это сделать?
Просто FYI, статическая ссылка libc в ваше приложение будет болезненной. У Zygote будет своя копия одного и того же глобального файла, и они будут конфликтующими. –
@ DanAlbert Я вижу. Чтобы быть ясным, вы говорите о некоторых глобальных данных, используемых внутри libc.a, которые используются косвенно и совместно используются пользователями библиотеки? – jozols
Возможно, возможно связать как-то только нужные части из статической библиотеки и избежать проблем с глобальными данными? Я думаю, что при использовании статического связующего линкера импортируются только необходимые вещи. – jozols