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 2.6k 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

    Hello,

    I am trying to implement the Tiny AES library for a proyect (Mobile Android and iOS) and when I try to compile, I get this errors:

    Undefined symbols for architecture arm64:
      "AES_ECB_encrypt(unsigned char*, unsigned char const*, unsigned char*, unsigned int)", referenced from:
          BLEInterface::onCharacteristicChanged(QLowEnergyCharacteristic const&, QByteArray const&) in bleinterface.o
      "AES_init(unsigned char)", 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)
    

    The app has been working fine, this errors have appeared from the Tiny AES Lib import.
    I have searched that it could be a wrong CMake config, but I have the -DCMAKE_OSX_ARCHITECTURES:STRING=arm64

    Thank you

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

    @vcasado

    add this in your cmakefile
    set(CMAKE_VERBOSE_MAKEFILE ON)
    to check if the lib of Tiny AES library is added to your build.

    1 Reply Last reply
    0
    • jsulmJ jsulm

      @vcasado Do you use an arm64 build of that library?

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

      @jsulm The library is provided as source https://github.com/kokke/tiny-AES-c
      And I am not using its CMakeLists.txt, I have imported in my src/ and inc/ folders the .h .hpp and .c files and added to my CMakeLists.txt as other sources.

      SGaistS 1 Reply Last reply
      0
      • V vcasado

        @jsulm The library is provided as source https://github.com/kokke/tiny-AES-c
        And I am not using its CMakeLists.txt, I have imported in my src/ and inc/ folders the .h .hpp and .c files and added to my CMakeLists.txt as other sources.

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

        @vcasado hi,

        Then please show your CMakeLists.txt content.

        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
        0
        • SGaistS SGaist

          @vcasado hi,

          Then please show your CMakeLists.txt content.

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

          @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 JonBJ 2 Replies 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.

            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