This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Undefined reference errors when linking

I am having trouble linking my ble mesh project, at first worked perfectly but now well it doesn't link, I haven't changed anything that I can think of. I used the lightswitch_server as a template. I am running Segger build 2020011001.41059, and on Manjaro Linux. It looks like there is some errors with the ble mesh friend system, because most of the errors have something to do with friend stuff. I think `#define MESH_FEATURE_FRIEND_ENABLED (1)` could have something to do with it. Below you can find my errors, and solution file.

I am using the nrf52833.

Name="Common"
      arm_architecture="v7EM"
      arm_core_type="Cortex-M4"
      arm_endian="Little"
      arm_fp_abi="Hard"
      arm_fpu_type="FPv4-SP-D16"
      arm_linker_heap_size="1024"
      arm_linker_process_stack_size="0"
      arm_linker_stack_size="2048"
      arm_linker_treat_warnings_as_errors="No"
      arm_simulator_memory_simulation_parameter="RWX 00000000,00100000,FFFFFFFF;RWX 20000000,00010000,CDCDCDCD"
      arm_target_device_name="nrf52833_xxAA"
      arm_target_interface_type="SWD"
      c_user_include_directories="include;./models/include;./common/include;$(MESH_ROOT:../../../)external/rtt/include;$(SDK_ROOT:../../../.  ./nRF5_SDK_16.0.0_98a08e2)/integration/nrfx/legacy;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/modules/nrfx/drivers/include;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/libraries/queue;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/libraries/balloc;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/libraries/libuarte/;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/ble/common;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/softdevice/common;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/libraries/strerror;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/libraries/atomic;$(MESH_ROOT:../../../)models/model_spec/generic_onoff/include;$(MESH_ROOT:../../../)models/model_spec/common/include;$(MESH_ROOT:../../../)models/foundation/config/include;$(MESH_ROOT:../../../)models/foundation/health/include;$(MESH_ROOT:../../../)mesh/stack/api;$(MESH_ROOT:../../../)mesh/core/api;$(MESH_ROOT:../../../)mesh/core/include;$(MESH_ROOT:../../../)mesh/access/api;$(MESH_ROOT:../../../)mesh/access/include;$(MESH_ROOT:../../../)mesh/dfu/api;$(MESH_ROOT:../../../)mesh/dfu/include;$(MESH_ROOT:../../../)mesh/prov/api;$(MESH_ROOT:../../../)mesh/prov/include;$(MESH_ROOT:../../../)mesh/bearer/api;$(MESH_ROOT:../../../)mesh/bearer/include;$(MESH_ROOT:../../../)mesh/gatt/api;$(MESH_ROOT:../../../)mesh/gatt/include;$(MESH_ROOT:../../../)mesh/friend/api;$(MESH_ROOT:../../../)mesh/friend/include;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/softdevice/s132/headers/;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/softdevice/s132/headers/nrf52/;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/modules/nrfx;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/modules/nrfx/mdk;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/modules/nrfx/hal;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/toolchain/cmsis/include;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/toolchain/gcc;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/toolchain/cmsis/dsp/GCC;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/boards;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/integration/nrfx;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/libraries/util;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/libraries/timer;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/libraries/log;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/libraries/log/src;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/libraries/experimental_section_vars;$(SDK_ROOT:../../../../nRF5_SDK_16.0.0_98a08e2)/components/libraries/delay;$(MESH_ROOT:../../../)external/micro-ecc;$(MESH_ROOT:../../../)mesh/core/include;"
      c_preprocessor_definitions="NO_VTOR_CONFIG;USE_APP_CONFIG;CONFIG_APP_IN_CORE;NRF52_SERIES;NRF52833;NRF52833_XXAA;S113;SOFTDEVICE_PRESENT;NRF_SD_BLE_API_VERSION=7;BOARD_PCA10100;CONFIG_GPIO_AS_PINRESET"
      debug_target_connection="J-Link"
      
      debug_additional_load_file="$(SDK_ROOT:../../../../NRF52SDK)/components/softdevice/s113/hex/s113_nrf52_7.0.1_softdevice.hex"
      
      debug_start_from_entry_point_symbol="No"
      linker_output_format="hex"
      linker_printf_width_precision_supported="Yes"
      linker_section_placement_file="$(ProjectDir)/flash_placement.xml"
      linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x78000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x1f000;FLASH_START=0x1c000;RAM_START=0x20001f60"
      linker_section_placements_segments="FLASH RX 0x0 0x78000;RAM RWX 0x20000000 0x1f000"
      project_directory=""
      macros="CMSIS_CONFIG_TOOL=$(SDK_ROOT:../../../../NRF52SDK)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar"

1> Linking Project.elf
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: build/Project_Debug/obj/transport.o: in function `transport_metadata_from_control_tx_params':
1> /home/User/GIT/Project-Firmware/NRF52Mesh/mesh/core/src/transport.c:1175: undefined reference to `friend_needs_packet'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: build/Project_Debug/obj/transport.o: in function `sar_ctx_cancel':
1> /home/User/GIT/Project-Firmware/NRF52Mesh/mesh/core/src/transport.c:485: undefined reference to `friend_sar_complete'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: build/Project_Debug/obj/transport.o: in function `trs_unseg_packet_in':
1> /home/User/GIT/Project-Firmware/NRF52Mesh/mesh/core/src/transport.c:1011: undefined reference to `friend_packet_in'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: build/Project_Debug/obj/transport.o: in function `transport_metadata_from_tx_params':
1> /home/User/GIT/Project-Firmware/NRF52Mesh/mesh/core/src/transport.c:1131: undefined reference to `friend_needs_packet'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: build/Project_Debug/obj/transport.o: in function `sar_rx_ctx_get':
1> /home/User/GIT/Project-Firmware/NRF52Mesh/mesh/core/src/transport.c:857: undefined reference to `friend_sar_exists'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: build/Project_Debug/obj/transport.o: in function `trs_seg_packet_in':
1> /home/User/GIT/Project-Firmware/NRF52Mesh/mesh/core/src/transport.c:971: undefined reference to `friend_packet_in'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: /home/User/GIT/Project-Firmware/NRF52Mesh/mesh/core/src/transport.c:989: undefined reference to `friend_sar_complete'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: build/Project_Debug/obj/transport.o: in function `transport_packet_in':
1> /home/User/GIT/Project-Firmware/NRF52Mesh/mesh/core/src/transport.c:1946: undefined reference to `friend_needs_packet'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: build/Project_Debug/obj/network.o: in function `network_packet_in':
1> /home/User/GIT/Project-Firmware/NRF52Mesh/mesh/core/src/network.c:367: undefined reference to `friend_friendship_established'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: build/Project_Debug/obj/mesh_stack.o: in function `mesh_stack_init':
1> /home/User/GIT/Project-Firmware/NRF52Mesh/mesh/stack/src/mesh_stack.c:133: undefined reference to `mesh_friend_init'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: build/Project_Debug/obj/mesh_stack.o: in function `mesh_stack_start':
1> /home/User/GIT/Project-Firmware/NRF52Mesh/mesh/stack/src/mesh_stack.c:157: undefined reference to `mesh_friend_enable'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: build/Project_Debug/obj/device_state_manager.o: in function `rx_group_address_get':
1> /home/User/GIT/Project-Firmware/NRF52Mesh/mesh/access/src/device_state_manager.c:380: undefined reference to `mesh_opt_friend_get'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: build/Project_Debug/obj/config_server.o: in function `handle_config_low_power_node_polltimeout_get':
1> /home/User/GIT/Project-Firmware/NRF52Mesh/models/foundation/config/src/config_server.c:2874: undefined reference to `friend_remaining_poll_timeout_time_get'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: build/Project_Debug/obj/config_server.o: in function `handle_config_friend_set':
1> /home/User/GIT/Project-Firmware/NRF52Mesh/models/foundation/config/src/config_server.c:942: undefined reference to `mesh_friend_disable'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: /home/User/GIT/Project-Firmware/NRF52Mesh/models/foundation/config/src/config_server.c:953: undefined reference to `mesh_friend_is_enabled'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: /home/User/GIT/Project-Firmware/NRF52Mesh/models/foundation/config/src/config_server.c:946: undefined reference to `mesh_friend_enable'
1> /usr/share/segger_embedded_studio_for_arm_4.40/gcc/arm-none-eabi/bin/ld: build/Project_Debug/obj/config_server.o: in function `handle_config_friend_get':
1> /home/User/GIT/Project-Firmware/NRF52Mesh/models/foundation/config/src/config_server.c:918: undefined reference to `mesh_friend_is_enabled'

Thank you in advance.

Parents
  • Hi

    It seems like you haven't included all the necessary source and header files to your project. In particular friend.c and mesh_friend.h. Please add all the necessary files to your project and try building it again. You'll keep getting these errors as long as there are necessary files missing from your project, you just have to find out where the various undefined reference to '...' comes from and add them.

    Best regards,

    Simon

  • Hi Simonr, I have came across same errors.

    When I enabled MESH_FEATURE_LPN_ENABLED (made it 1) it didn't throw any errors.

    But when I enabled MESH_FEATURE_FRIEND_ENABLED (made it 1) it is throwing errors.

    As per above comment of yours where I need to add friend.c also where can I find friend.c

Reply Children
Related