Issue in integrating the .lib file in visual studio code with GCC

Hi All,

I am facing an issue in adding a precompiled library of the format .lib to visual studio code with GCC, I added LDFLAGS to the makefile, but still it is showing the lib file cannot be found

Can anybody guide me , on the steps that needs to be done when linking a .lib file to the makefile.

Note : The .lib file was generated in Keil IDE.

  • Hey, 

    That looks correct,

    Can you share a screenshot of the sensor folder from file explorer? How does it look like?

    regards

    Jared

  • Hi Jared

    Please find the screenshot of the sensor folder from the explorer.

  • /**** Start of the file *******/
    PROJECT_NAME     := spi_pca10056
    TARGETS          := nrf52840_xxaa
    OUTPUT_DIRECTORY := _build

    SDK_ROOT := ../../../../../..
    PROJ_DIR := ../../..

    $(OUTPUT_DIRECTORY)/nrf52840_xxaa.out: \
        LINKER_SCRIPT  := spi_gcc_nrf52.ld

    # Source files common to all targets
    SRC_FILES += \
        $(SDK_ROOT)/modules/nrfx/mdk/gcc_startup_nrf52840.S \
        $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_rtt.c \
        $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_serial.c \
        $(SDK_ROOT)/components/libraries/log/src/nrf_log_backend_uart.c \
        $(SDK_ROOT)/components/libraries/log/src/nrf_log_default_backends.c \
        $(SDK_ROOT)/components/libraries/log/src/nrf_log_frontend.c \
        $(SDK_ROOT)/components/libraries/log/src/nrf_log_str_formatter.c \
        $(SDK_ROOT)/components/boards/boards.c \
        $(SDK_ROOT)/components/libraries/button/app_button.c \
        $(SDK_ROOT)/components/libraries/util/app_error.c \
        $(SDK_ROOT)/components/libraries/util/app_error_handler_gcc.c \
        $(SDK_ROOT)/components/libraries/util/app_error_weak.c \
        $(SDK_ROOT)/components/libraries/scheduler/app_scheduler.c \
        $(SDK_ROOT)/components/libraries/timer/app_timer2.c \
        $(SDK_ROOT)/components/libraries/util/app_util_platform.c \
        $(SDK_ROOT)/components/libraries/timer/drv_rtc.c \
        $(SDK_ROOT)/components/libraries/util/nrf_assert.c \
        $(SDK_ROOT)/components/libraries/atomic_fifo/nrf_atfifo.c \
        $(SDK_ROOT)/components/libraries/atomic/nrf_atomic.c \
        $(SDK_ROOT)/components/libraries/balloc/nrf_balloc.c \
        $(SDK_ROOT)/external/fprintf/nrf_fprintf.c \
        $(SDK_ROOT)/external/fprintf/nrf_fprintf_format.c \
        $(SDK_ROOT)/components/libraries/memobj/nrf_memobj.c \
        $(SDK_ROOT)/components/libraries/ringbuf/nrf_ringbuf.c \
        $(SDK_ROOT)/components/libraries/sortlist/nrf_sortlist.c \
        $(SDK_ROOT)/components/libraries/strerror/nrf_strerror.c \
        $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_spi.c \
        $(SDK_ROOT)/integration/nrfx/legacy/nrf_drv_uart.c \
        $(SDK_ROOT)/modules/nrfx/soc/nrfx_atomic.c \
        $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_gpiote.c \
        $(SDK_ROOT)/modules/nrfx/drivers/src/prs/nrfx_prs.c \
        $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_spi.c \
        $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_spim.c \
        $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uart.c \
        $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_uarte.c \
        $(SDK_ROOT)/components/libraries/bsp/bsp.c \
        $(PROJ_DIR)/main.c \
        $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT.c \
        $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c \
        $(SDK_ROOT)/external/segger_rtt/SEGGER_RTT_printf.c \
        $(SDK_ROOT)/modules/nrfx/mdk/system_nrf52840.c \
        $(SDK_ROOT)/examples/peripheral/spi/APP/hal/ftk_spi.c \
        $(SDK_ROOT)/examples/peripheral/spi/APP/hal/ftk_uart.c \
        $(SDK_ROOT)/examples/peripheral/spi/APP/sensor/sensorDriver.c \
        $(SDK_ROOT)/examples/peripheral/spi/APP/sensor/platform.c \

    # Include folders common to all targets
    INC_FOLDERS += \
        $(SDK_ROOT)/components \
        $(SDK_ROOT)/modules/nrfx/mdk \
        $(SDK_ROOT)/components/libraries/scheduler \
        $(PROJ_DIR) \
        $(SDK_ROOT)/components/libraries/timer \
        $(SDK_ROOT)/components/boards \
        $(SDK_ROOT)/components/libraries/strerror \
        $(SDK_ROOT)/components/toolchain/cmsis/include \
        $(SDK_ROOT)/components/libraries/util \
        ../config \
        $(SDK_ROOT)/components/libraries/balloc \
        $(SDK_ROOT)/components/libraries/ringbuf \
        $(SDK_ROOT)/modules/nrfx/hal \
        $(SDK_ROOT)/components/libraries/bsp \
        $(SDK_ROOT)/components/libraries/log \
        $(SDK_ROOT)/components/libraries/button \
        $(SDK_ROOT)/modules/nrfx \
        $(SDK_ROOT)/components/libraries/experimental_section_vars \
        $(SDK_ROOT)/integration/nrfx/legacy \
        $(SDK_ROOT)/components/libraries/delay \
        $(SDK_ROOT)/external/segger_rtt \
        $(SDK_ROOT)/components/libraries/atomic_fifo \
        $(SDK_ROOT)/components/drivers_nrf/nrf_soc_nosd \
        $(SDK_ROOT)/components/libraries/atomic \
        $(SDK_ROOT)/components/libraries/sortlist \
        $(SDK_ROOT)/components/libraries/memobj \
        $(SDK_ROOT)/integration/nrfx \
        $(SDK_ROOT)/modules/nrfx/drivers/include \
        $(SDK_ROOT)/external/fprintf \
        $(SDK_ROOT)/components/libraries/log/src \
        $(SDK_ROOT)/examples/peripheral/spi/APP/hal \
        $(SDK_ROOT)/examples/peripheral/spi/APP/sensor \



    # Libraries common to all targets
    LIB_FILES += \

    # Optimization flags
    OPT = -O3 -g3
    # Uncomment the line below to enable link time optimization
    #OPT += -flto

    # C flags common to all targets
    CFLAGS += $(OPT)
    CFLAGS += -DAPP_TIMER_V2
    CFLAGS += -DAPP_TIMER_V2_RTC1_ENABLED
    CFLAGS += -DBOARD_PCA10056
    CFLAGS += -DCONFIG_GPIO_AS_PINRESET
    CFLAGS += -DFLOAT_ABI_HARD  
    CFLAGS += -DNRF52840_XXAA
    CFLAGS += -mcpu=cortex-m4
    CFLAGS += -mthumb -mabi=aapcs
    CFLAGS += -Wall -Werror
    CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
    # keep every function in a separate section, this allows linker to discard unused ones
    CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing
    CFLAGS += -fno-builtin -fshort-enums

    # C++ flags common to all targets
    CXXFLAGS += $(OPT)
    # Assembler flags common to all targets
    ASMFLAGS += -g3
    ASMFLAGS += -mcpu=cortex-m4
    ASMFLAGS += -mthumb -mabi=aapcs
    ASMFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
    ASMFLAGS += -DAPP_TIMER_V2
    ASMFLAGS += -DAPP_TIMER_V2_RTC1_ENABLED
    ASMFLAGS += -DBOARD_PCA10056
    ASMFLAGS += -DCONFIG_GPIO_AS_PINRESET
    ASMFLAGS += -DFLOAT_ABI_HARD
    ASMFLAGS += -DNRF52840_XXAA

    # Linker flags
    LDFLAGS += $(OPT)
    LDFLAGS += -mthumb -mabi=aapcs -L$(SDK_ROOT)/modules/nrfx/mdk -T$(LINKER_SCRIPT)
    #sensor Library

    LDFLAGS += -L$(SDK_ROOT)/examples/peripheral/spi/APP/sensor -l986algo


    LDFLAGS += -mcpu=cortex-m4
    LDFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
    # let linker dump unused sections
    LDFLAGS += -Wl,--gc-sections
    # use newlib in nano version
    LDFLAGS += --specs=nano.specs

    nrf52840_xxaa: CFLAGS += -D__HEAP_SIZE=8192
    nrf52840_xxaa: CFLAGS += -D__STACK_SIZE=8192
    nrf52840_xxaa: ASMFLAGS += -D__HEAP_SIZE=8192
    nrf52840_xxaa: ASMFLAGS += -D__STACK_SIZE=8192

    # Add standard libraries at the very end of the linker input, after all objects
    # that may need symbols provided by these libraries.
    LIB_FILES += -lc -lnosys -lm


    .PHONY: default help

    # Default target - first one defined
    default: nrf52840_xxaa

    # Print all targets that can be built
    help:
        @echo following targets are available:
        @echo       nrf52840_xxaa
        @echo       sdk_config - starting external tool for editing sdk_config.h
        @echo       flash      - flashing binary

    TEMPLATE_PATH := $(SDK_ROOT)/components/toolchain/gcc


    include $(TEMPLATE_PATH)/Makefile.common

    $(foreach target, $(TARGETS), $(call define_target, $(target)))

    .PHONY: flash erase

    # Flash the program
    flash: default
        @echo Flashing: $(OUTPUT_DIRECTORY)/nrf52840_xxaa.hex
        nrfjprog -f nrf52 --program $(OUTPUT_DIRECTORY)/nrf52840_xxaa.hex --sectorerase
        nrfjprog -f nrf52 --reset

    erase:
        nrfjprog -f nrf52 --eraseall

    SDK_CONFIG_FILE := ../config/sdk_config.h
    CMSIS_CONFIG_TOOL := $(SDK_ROOT)/external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar
    sdk_config:
        java -jar $(CMSIS_CONFIG_TOOL) $(SDK_CONFIG_FILE)
    /**** End of the file *******/

    I have added the required .c files and the folders to the makefile and also added LDFLAG to link the library. Let me know if any more changes needs to be made in the makefile or in any JSON files.
    Thanks in Advance
       
  • Hi Jared,

    I just tried to link the file using LIBFILES flag, but still I got an error. Can you help me figure this issue?

  • Hi,

    It seems that the original issue has been resolved, and that it now finds the pre compiled lib,

    You can try to add fshort-wchar as a CFLAG in the makefile:

    CFLAGS += -fshort-wchar

    regarsd

    Jared 

Related