¿Cómo enlazar bibliotecas de OpenSSL en una aplicación CMake Qt Android?
He intentado varias opciones pero aun no he logrado enlazar las bibliotecas exitosamente. Tengo una aplicación Qt Android CMake y necesito enlazar las bibliotecas libssl
y libcrypto
. Las he colocado en el directorio del proyecto /android_openssl/ANDROID_ABI/lib/
y para cada ABI tengo esto:
También la carpeta include
se encuentra al lado de las carpetas ABI. He intentado estas soluciones pero termino sin lograr enlazar estas bibliotecas:
He probado esta posible solución y obtuve el siguiente error:
add_library(ssl STATIC IMPORTED)
add_library(crypto STATIC IMPORTED)
set_target_properties(ssl PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/android_openssl/${ANDROID_ABI}/lib/libssl.a)
set_target_properties(crypto PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/android_openssl/${ANDROID_ABI}/lib/libcrypto.a)
add_library(MyApp SHARED
${PROJECT_SOURCES}
${PROJECT_HEADERS}
${PROJECT_RESOURCES}
)
target_link_libraries(MyApp
PRIVATE
ssl
crypto
Qt5::Core
Qt5::Quick
Qt5::QuickControls2
Qt5::Sql
Qt5::Network
Qt5::Svg
)
Error:
E linker : La biblioteca "/system/lib/libcrypto.so" ("/system/lib/libcrypto.so") necesaria o solicitada por "/data/app/~~Xp7o_GB4MNRnsRrBx8X1Pw==/org.qtproject.example-VZ3Vyyfp8FGD1_RYb2Soug==/lib/x86/libQt5Core_x86.so" no está accesible para el espacio de nombres: [nombre="namespace-del-classloader", ld_library_paths="", default_library_paths="/data/app/~~Xp7o_GB4MNRnsRrBx8X1Pw==/org.qtproject.example-VZ3Vyyfp8FGD1_RYb2Soug==/lib/x86:/data/app/~~Xp7o_GB4MNRnsRrBx8X1Pw==/org.qtproject.example-VZ3Vyyfp8FGD1_RYb2Soug==/base.apk!/lib/x86", permitted_paths="/data:/mnt/expand:/data/user/0/org.qtproject.example"]
W libMyApp_x86.so: qt.network.ssl: QSslSocket::connectToHostEncrypted: la inicialización de TLS ha fallado
¿Puedes decirme por favor qué estoy haciendo mal? He encontrado muchos recursos sobre este tema, pero todavía estoy haciendo algo mal.
Además, veo que aquí tengo bibliotecas estáticas para cada ABI .a
y también veo .so.1.1
. ¿Cuál debo enlazar?
davy.ai
Solucionando problemas de vinculación de las bibliotecas
libssl
ylibcrypto
en una aplicación de Qt Android CMakeSi estás teniendo problemas para vincular las bibliotecas
libssl
ylibcrypto
en tu aplicación de Qt Android CMake, aquí tienes algunos pasos de solución de problemas que puedes intentar:Asegúrate de haber especificado las rutas correctas de las bibliotecas
libssl
ylibcrypto
. Asegúrate de que las bibliotecas estén ubicadas en el directorio del proyecto/android_openssl/ANDROID_ABI/lib/
y que la carpetainclude
esté junto a las carpetas ABI.Puede que estés utilizando el tipo de biblioteca equivocado. Intenta cambiar de bibliotecas estáticas (
STATIC
) a bibliotecas dinámicas (SHARED
) en tu archivo CMake.Asegúrate de estar vinculando a la versión correcta de las bibliotecas. Si tienes disponibles tanto bibliotecas
.a
como.so.1.1
, intenta vincularte a los objetos compartidos (.so.1.1
).Asegúrate de que las bibliotecas que estás intentando vincular sean accesibles verificando las rutas de las bibliotecas y asegurándote de que las bibliotecas no estén bloqueadas por ninguna medida de seguridad.
Asegúrate de estar vinculando las bibliotecas en el orden correcto. En tu archivo CMake, asegúrate de estar vinculando
libssl
antes quelibcrypto
y de que sean vinculadas antes que cualquier otra biblioteca.Siguiendo estos pasos, deberías poder vincular exitosamente las bibliotecas
libssl
ylibcrypto
en tu aplicación de Qt Android CMake. Si continúas encontrando problemas, busca el consejo de un experto en IT.