Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Linking target libraries from different tree branch
QtWS25 Last Chance

Linking target libraries from different tree branch

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
andoid x86cmakeqt6
2 Posts 1 Posters 335 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    AkshayFP
    wrote on 16 Jan 2022, 21:02 last edited by AkshayFP
    #1

    I am trying to build a Qt for Android application and I have a root project that looks like this:

    root
    |
    |- CMakeList.txt
    |- Project_A <- shared object
    |  `- CMakeList.txt
    `- Project_B <- actual app
       `- CMakeList.txt
    

    Now, Project_B depends on Project_A. Project_A builds the a shared object - libProject_A_x86_64.so.

    In Project_B, I have the following configurations:

    ...
    target_include_directories(cook-ui-modular-qt PUBLIC
        ../Project_A
    )
    
    if(ANDROID)
        set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android" CACHE INTERNAL "")
        set(LIBS ${CMAKE_BINARY_DIR}/Project_A/libProject_A_${ANDROID_ABI}.so)
    
        target_link_libraries(root PUBLIC ${LIBS})
        set(ANDROID_EXTRA_LIBS ${LIBS} CACHE INTERNAL "")
    endif()
    ...
    

    Even though have these linked, I still get the following error:

    E AndroidRuntime: FATAL EXCEPTION: qtMainLoopThread
    E AndroidRuntime: Process: org.qtproject.example.cook_ui_modular_qt, PID: 3484
    E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: library "libProject_A_x86_64.so" not found: needed by /data/app/~~z1ZkaaXPy7l45CcQdoiWxA==/org.qtproject.example.cook_ui_modular_qt-piF9pyelBLjV1RLkvk0wIA==/lib/x86_64/libcook-ui-modular-qt_x86_64.so in namespace classloader-namespace
    E AndroidRuntime: 	at java.lang.Runtime.load0(Runtime.java:939)
    E AndroidRuntime: 	at java.lang.System.load(System.java:1628)
    E AndroidRuntime: 	at org.qtproject.qt.android.QtNative$4.run(QtNative.java:516)
    E AndroidRuntime: 	at org.qtproject.qt.android.QtThread$2.run(QtThread.java:87)
    E AndroidRuntime: 	at org.qtproject.qt.android.QtThread$1.run(QtThread.java:61)
    E AndroidRuntime: 	at java.lang.Thread.run(Thread.java:923)
    

    This basically means that the libProject_A_x86_64.so is not found. I am not sure how to make this file available to the apk. Any help on this would be appreciated.

    1 Reply Last reply
    0
    • A Offline
      A Offline
      AkshayFP
      wrote on 17 Jan 2022, 00:59 last edited by
      #2

      A hack that I had to do for this to work is to manually copy the so file.

      if(ANDROID)
          add_custom_command(TARGET cook-ui-modular-qt POST_BUILD
              COMMAND ${CMAKE_COMMAND} -E copy
              ${CMAKE_BINARY_DIR}/App/ConnectedSocket/libConnectedSocket_${ANDROID_ABI}.so
              ${CMAKE_BINARY_DIR}/App/UserInterface/android-build/libs/${ANDROID_ABI}/libConnectedSocket_${ANDROID_ABI}.so
              )
      endif()
      

      This is obviously not the right way to do it. But I don't know how to do it the right way

      1 Reply Last reply
      0

      1/2

      16 Jan 2022, 21:02

      • Login

      • Login or register to search.
      1 out of 2
      • First post
        1/2
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved