Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Undefined symbols for arm64
Forum Updated to NodeBB v4.3 + New Features

Undefined symbols for arm64

Scheduled Pinned Locked Moved Unsolved General and Desktop
16 Posts 5 Posters 3.7k Views 1 Watching
  • 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.
  • V vcasado

    @SGaist Hi,

    This is my CMakeLists.txt

    cmake_minimum_required(VERSION 3.16)
    
    project(BLETester VERSION 1.1 LANGUAGES CXX)
    
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    set(CMAKE_VERBOSE_MAKEFILE ON)
    
    find_package(Qt6 6.4 REQUIRED COMPONENTS Quick Bluetooth Positioning Location Widgets)
    
    qt_standard_project_setup()
    
    qt_add_executable(BLETester
        main.cpp
        mainwindow.cpp
        bleinterface.cpp
        mainwindow.h
        bleinterface.h
        characteristicinfo.cpp characteristicinfo.h
        aes.c aes.h aes.hpp
    )
    
    set_target_properties(BLETester PROPERTIES
        MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
        MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
        MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
        MACOSX_BUNDLE TRUE
        WIN32_EXECUTABLE TRUE
    )
    
    if (APPLE)
        if (IOS)
            set_target_properties(BLETester PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist")
        endif()
    endif()
    
    target_link_libraries(BLETester
        PRIVATE
            Qt::Bluetooth
            Qt::Core
            Qt::Gui
            Qt::Qml
            Qt::Quick
            Qt::Positioning
            Qt::Location
            Qt::Widgets
    )
    
    install(TARGETS BLETester
        BUNDLE DESTINATION .
        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    )
    
    

    And included in bleinterface.h:

    #include "aes.hpp"
    

    And used in bleinterface.cpp:

    AES_init(0);
    AES_ECB_encrypt(in_Buffer, key, output_Buffer, value[2]);
    

    Thank you.

    JoeCFDJ Offline
    JoeCFDJ Offline
    JoeCFD
    wrote on last edited by JoeCFD
    #7

    @vcasado said in Undefined symbols for arm64:

    aes.h aes.hpp

    are aes.h and aes.hpp same? It is rare to define two files like that.

    V 1 Reply Last reply
    0
    • JoeCFDJ JoeCFD

      @vcasado said in Undefined symbols for arm64:

      aes.h aes.hpp

      are aes.h and aes.hpp same? It is rare to define two files like that.

      V Offline
      V Offline
      vcasado
      wrote on last edited by
      #8

      @JoeCFD No, the .hpp is like a wrapper that contains:

      #ifndef _AES_HPP_
      #define _AES_HPP_
      
      #ifndef __cplusplus
      #error Do not include the hpp header in a c project!
      #endif //__cplusplus
      
      extern "C" {
      #include "aes.h"
      }
      
      #endif //_AES_HPP_
      

      But in the CMakeLists.txt, the .h is included so it does not report that file not found when compiling

      JonBJ 1 Reply Last reply
      0
      • V vcasado

        @JoeCFD No, the .hpp is like a wrapper that contains:

        #ifndef _AES_HPP_
        #define _AES_HPP_
        
        #ifndef __cplusplus
        #error Do not include the hpp header in a c project!
        #endif //__cplusplus
        
        extern "C" {
        #include "aes.h"
        }
        
        #endif //_AES_HPP_
        

        But in the CMakeLists.txt, the .h is included so it does not report that file not found when compiling

        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by
        #9

        @vcasado
        I know nothing about this, but are you sure the 2 undefined references with those parameters are really supposed to be in Tiny AES's library aes.h? When I look at e.g. https://morioh.com/p/67a35723557d or https://github.com/kokke/tiny-AES-c/blob/master/aes.h I do not see either of them?

        V 1 Reply Last reply
        0
        • JonBJ JonB

          @vcasado
          I know nothing about this, but are you sure the 2 undefined references with those parameters are really supposed to be in Tiny AES's library aes.h? When I look at e.g. https://morioh.com/p/67a35723557d or https://github.com/kokke/tiny-AES-c/blob/master/aes.h I do not see either of them?

          V Offline
          V Offline
          vcasado
          wrote on last edited by
          #10

          @JonB You are right, now the usage in bleinterface.cpp is:

              struct AES_ctx ctx;
              AES_init_ctx(&ctx, key);
          
              for (int i = 0; i < 4; ++i)
              {
                  AES_ECB_encrypt(&ctx, in_Buffer + (i * 16));
              }
          

          And the error is:

          Undefined symbols for architecture arm64:
            "_AES_ECB_encrypt", referenced from:
                BLEInterface::onCharacteristicChanged(QLowEnergyCharacteristic const&, QByteArray const&) in bleinterface.o
            "_AES_init_ctx", referenced from:
                BLEInterface::onCharacteristicChanged(QLowEnergyCharacteristic const&, QByteArray const&) in bleinterface.o
          ld: symbol(s) not found for architecture arm64
          clang: error: linker command failed with exit code 1 (use -v to see invocation)
          
          JonBJ 1 Reply Last reply
          0
          • V vcasado

            @JonB You are right, now the usage in bleinterface.cpp is:

                struct AES_ctx ctx;
                AES_init_ctx(&ctx, key);
            
                for (int i = 0; i < 4; ++i)
                {
                    AES_ECB_encrypt(&ctx, in_Buffer + (i * 16));
                }
            

            And the error is:

            Undefined symbols for architecture arm64:
              "_AES_ECB_encrypt", referenced from:
                  BLEInterface::onCharacteristicChanged(QLowEnergyCharacteristic const&, QByteArray const&) in bleinterface.o
              "_AES_init_ctx", referenced from:
                  BLEInterface::onCharacteristicChanged(QLowEnergyCharacteristic const&, QByteArray const&) in bleinterface.o
            ld: symbol(s) not found for architecture arm64
            clang: error: linker command failed with exit code 1 (use -v to see invocation)
            
            JonBJ Offline
            JonBJ Offline
            JonB
            wrote on last edited by
            #11

            @vcasado
            I also know nothing about cmake :) Can you at least show the full linker command line it uses, let's see whether libaes.a is even there? Assuming it comes with a library not just source code you compile into yours. I also know nothing about Android/iOS building!

            V 1 Reply Last reply
            0
            • JonBJ JonB

              @vcasado
              I also know nothing about cmake :) Can you at least show the full linker command line it uses, let's see whether libaes.a is even there? Assuming it comes with a library not just source code you compile into yours. I also know nothing about Android/iOS building!

              V Offline
              V Offline
              vcasado
              wrote on last edited by
              #12

              @JonB There is no compiled library, that is why I am compiling it as it would be more sources of my project

              SGaistS 1 Reply Last reply
              0
              • V vcasado

                @JonB There is no compiled library, that is why I am compiling it as it would be more sources of my project

                SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #13

                You have locked your project to C++ only. Remove that and rebuild.

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                V 1 Reply Last reply
                1
                • SGaistS SGaist

                  You have locked your project to C++ only. Remove that and rebuild.

                  V Offline
                  V Offline
                  vcasado
                  wrote on last edited by
                  #14

                  @SGaist How?

                  1 Reply Last reply
                  0
                  • V vcasado

                    @SGaist Hi,

                    This is my CMakeLists.txt

                    cmake_minimum_required(VERSION 3.16)
                    
                    project(BLETester VERSION 1.1 LANGUAGES CXX)
                    
                    set(CMAKE_CXX_STANDARD_REQUIRED ON)
                    set(CMAKE_VERBOSE_MAKEFILE ON)
                    
                    find_package(Qt6 6.4 REQUIRED COMPONENTS Quick Bluetooth Positioning Location Widgets)
                    
                    qt_standard_project_setup()
                    
                    qt_add_executable(BLETester
                        main.cpp
                        mainwindow.cpp
                        bleinterface.cpp
                        mainwindow.h
                        bleinterface.h
                        characteristicinfo.cpp characteristicinfo.h
                        aes.c aes.h aes.hpp
                    )
                    
                    set_target_properties(BLETester PROPERTIES
                        MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
                        MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
                        MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
                        MACOSX_BUNDLE TRUE
                        WIN32_EXECUTABLE TRUE
                    )
                    
                    if (APPLE)
                        if (IOS)
                            set_target_properties(BLETester PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist")
                        endif()
                    endif()
                    
                    target_link_libraries(BLETester
                        PRIVATE
                            Qt::Bluetooth
                            Qt::Core
                            Qt::Gui
                            Qt::Qml
                            Qt::Quick
                            Qt::Positioning
                            Qt::Location
                            Qt::Widgets
                    )
                    
                    install(TARGETS BLETester
                        BUNDLE DESTINATION .
                        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
                        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
                    )
                    
                    

                    And included in bleinterface.h:

                    #include "aes.hpp"
                    

                    And used in bleinterface.cpp:

                    AES_init(0);
                    AES_ECB_encrypt(in_Buffer, key, output_Buffer, value[2]);
                    

                    Thank you.

                    JonBJ Offline
                    JonBJ Offline
                    JonB
                    wrote on last edited by
                    #15

                    @vcasado said in Undefined symbols for arm64:

                    project(BLETester VERSION 1.1 LANGUAGES CXX)

                    I'm purely guessing, but chage this? E.g. ... LANGUAGES CXX C?

                    V 1 Reply Last reply
                    0
                    • JonBJ JonB

                      @vcasado said in Undefined symbols for arm64:

                      project(BLETester VERSION 1.1 LANGUAGES CXX)

                      I'm purely guessing, but chage this? E.g. ... LANGUAGES CXX C?

                      V Offline
                      V Offline
                      vcasado
                      wrote on last edited by
                      #16

                      @JonB said in Undefined symbols for arm64:

                      @vcasado said in Undefined symbols for arm64:

                      project(BLETester VERSION 1.1 LANGUAGES CXX)

                      I'm purely guessing, but chage this? E.g. ... LANGUAGES CXX C?

                      Fixed with this! Thank you!

                      1 Reply Last reply
                      0

                      • Login

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