es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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:

Imagen

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?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solucionando problemas de vinculación de las bibliotecas libssl y libcrypto en una aplicación de Qt Android CMake

    Si estás teniendo problemas para vincular las bibliotecas libssl y libcrypto en tu aplicación de Qt Android CMake, aquí tienes algunos pasos de solución de problemas que puedes intentar:

    1. Verifica las Rutas de las Bibliotecas

    Asegúrate de haber especificado las rutas correctas de las bibliotecas libssl y libcrypto. Asegúrate de que las bibliotecas estén ubicadas en el directorio del proyecto /android_openssl/ANDROID_ABI/lib/ y que la carpeta include esté junto a las carpetas ABI.

    1. Utiliza el Tipo de Biblioteca Correcto

    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.

    1. Especifica la Versión Correcta de la Biblioteca

    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).

    1. Verifica la Accesibilidad de la Biblioteca

    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.

    1. Utiliza el Orden Correcto de Vinculación

    Asegúrate de estar vinculando las bibliotecas en el orden correcto. En tu archivo CMake, asegúrate de estar vinculando libssl antes que libcrypto y de que sean vinculadas antes que cualquier otra biblioteca.

    Siguiendo estos pasos, deberías poder vincular exitosamente las bibliotecas libssl y libcrypto en tu aplicación de Qt Android CMake. Si continúas encontrando problemas, busca el consejo de un experto en IT.

Comments are closed.