I wants to add a zlib library for compression and decompression a stream of data.I was cross compiled the zlib and generate the libz.so and libz.a file.
I wants to add a zlib library for compression and decompression a stream of data.I was cross compiled the zlib and generate the libz.so and libz.a file.
Hi,
There is already support for compression and decompression in nRF Connect SDK through the LZ4 library. If you are free to choose compression algorithm then this library is definitely the recommendation. See the LZ4 sample found at <sdk folder>\zephyr\samples\compression\lz4\ for reference.
For building and including precompiled (external static) libraries, please have a look at the External Library sample found at <sdk folder>\zephyr\samples\application_development\external_lib\ for reference.
Regards,
Terje
Hi,
There is already support for compression and decompression in nRF Connect SDK through the LZ4 library. If you are free to choose compression algorithm then this library is definitely the recommendation. See the LZ4 sample found at <sdk folder>\zephyr\samples\compression\lz4\ for reference.
For building and including precompiled (external static) libraries, please have a look at the External Library sample found at <sdk folder>\zephyr\samples\application_development\external_lib\ for reference.
Regards,
Terje
In lz4 compression method the compression ration was lesser compare to zlib so we want zlib method.Here i am cross compiled zlib with arm-none-eabi toolchain and generated the shared object file(.so) .I added the .so file in external libaray like
And my project folder looks like this:
├--- CMakeLists.txt
├--- prj.conf
├--- src
└-- main.c
└--- externlib
└-- inc
└--zlib.h and zconf.h #header file to be included
└-- lib
└-- libz.a #library to be added
└-- libz.so #library to be added
While i am adding my library in cmakelist i got some error like this
Building hello_world /bin/sh -c west build --build-dir /home/mysticp0004/Desktop/Linux_Study/hello_world/build /home/mysticp0004/Desktop/Linux_Study/hello_world [0/1] Re-running CMake... Loading Zephyr default modules (Zephyr base (cached)). -- Application: /home/mysticp0004/Desktop/Linux_Study/hello_world -- CMake version: 3.20.5 -- Cache files will be written to: /home/mysticp0004/.cache/zephyr -- Zephyr version: 3.3.99 (/home/mysticp0004/NCS/v2.4.0/zephyr) -- Found west (found suitable version "1.0.0", minimum required is "0.7.1") -- Board: nrf52840dongle_nrf52840 -- Found host-tools: zephyr 0.16.0 (/home/mysticp0004/NCS/toolchains/1f9b40e71a/opt/zephyr-sdk) -- Found toolchain: zephyr 0.16.0 (/home/mysticp0004/NCS/toolchains/1f9b40e71a/opt/zephyr-sdk) -- Found BOARD.dts: /home/mysticp0004/NCS/v2.4.0/zephyr/boards/arm/nrf52840dongle_nrf52840/nrf52840dongle_nrf52840.dts -- Generated zephyr.dts: /home/mysticp0004/Desktop/Linux_Study/hello_world/build/zephyr/zephyr.dts -- Generated devicetree_generated.h: /home/mysticp0004/Desktop/Linux_Study/hello_world/build/zephyr/include/generated/devicetree_generated.h -- Including generated dts.cmake file: /home/mysticp0004/Desktop/Linux_Study/hello_world/build/zephyr/dts.cmake Parsing /home/mysticp0004/NCS/v2.4.0/zephyr/Kconfig Loaded configuration '/home/mysticp0004/Desktop/Linux_Study/hello_world/build/zephyr/.config' No change to configuration in '/home/mysticp0004/Desktop/Linux_Study/hello_world/build/zephyr/.config' No change to Kconfig header in '/home/mysticp0004/Desktop/Linux_Study/hello_world/build/zephyr/include/generated/autoconf.h' CMake Warning at /home/mysticp0004/NCS/v2.4.0/zephyr/subsys/usb/device/CMakeLists.txt:22 (message): CONFIG_USB_DEVICE_VID has default value 0x2FE3. This value is only for testing and MUST be configured for USB products. CMake Warning at /home/mysticp0004/NCS/v2.4.0/zephyr/subsys/usb/device/CMakeLists.txt:28 (message): CONFIG_USB_DEVICE_PID has default value 0x100. This value is only for testing and MUST be configured for USB products. CMake Warning at /home/mysticp0004/NCS/v2.4.0/zephyr/CMakeLists.txt:838 (message): No SOURCES given to Zephyr library: lib__libc__common Excluding target from build. -- Configuring done -- Generating done -- Build files have been written to: /home/mysticp0004/Desktop/Linux_Study/hello_world/build [1/14] Generating misc/generated/syscalls.json, misc/generated/struct_tags.json [2/14] Generating linker_zephyr_pre0.cmd [3/14] Generating linker_zephyr_pre1.cmd [4/14] Linking C executable zephyr/zephyr_pre0.elf FAILED: zephyr/zephyr_pre0.elf zephyr/zephyr_pre0.map : && ccache /home/mysticp0004/NCS/toolchains/1f9b40e71a/opt/zephyr-sdk/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc -gdwarf-4 zephyr/CMakeFiles/zephyr_pre0.dir/misc/empty_file.c.obj -o zephyr/zephyr_pre0.elf -fuse-ld=bfd -Wl,-T zephyr/linker_zephyr_pre0.cmd -Wl,-Map=/home/mysticp0004/Desktop/Linux_Study/hello_world/build/zephyr/zephyr_pre0.map -Wl,--whole-archive app/libapp.a zephyr/libzephyr.a zephyr/arch/common/libarch__common.a zephyr/arch/arch/arm/core/aarch32/libarch__arm__core__aarch32.a zephyr/arch/arch/arm/core/aarch32/cortex_m/libarch__arm__core__aarch32__cortex_m.a zephyr/arch/arch/arm/core/aarch32/mpu/libarch__arm__core__aarch32__mpu.a zephyr/lib/libc/minimal/liblib__libc__minimal.a zephyr/soc/arm/common/cortex_m/libsoc__arm__common__cortex_m.a zephyr/soc/arm/nordic_nrf/nrf52/libsoc__arm__nordic_nrf__nrf52.a zephyr/boards/boards/arm/nrf52840dongle_nrf52840/libboards__arm__nrf52840dongle_nrf52840.a zephyr/drivers/usb/device/libdrivers__usb__device.a zephyr/drivers/clock_control/libdrivers__clock_control.a zephyr/drivers/gpio/libdrivers__gpio.a zephyr/drivers/hwinfo/libdrivers__hwinfo.a zephyr/drivers/pinctrl/libdrivers__pinctrl.a zephyr/drivers/serial/libdrivers__serial.a zephyr/drivers/timer/libdrivers__timer.a modules/nrf/lib/fatal_error/lib..__nrf__lib__fatal_error.a modules/nrf/drivers/hw_cc310/lib..__nrf__drivers__hw_cc310.a modules/hal_nordic/nrfx/libmodules__hal_nordic__nrfx.a -Wl,--no-whole-archive zephyr/kernel/libkernel.a zephyr/CMakeFiles/offsets.dir/./arch/arm/core/offsets/offsets.c.obj -L"/home/mysticp0004/NCS/toolchains/1f9b40e71a/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/thumb/v7e-m/nofp" -L/home/mysticp0004/Desktop/Linux_Study/hello_world/build/zephyr -lgcc ../externlib/lib/libz.so zephyr/arch/common/libisr_tables.a -mcpu=cortex-m4 -mthumb -mabi=aapcs -Wl,--gc-sections -Wl,--build-id=none -Wl,--sort-common=descending -Wl,--sort-section=alignment -Wl,-u,_OffsetAbsSyms -Wl,-u,_ConfigAbsSyms -nostdlib -static -Wl,-X -Wl,-N -Wl,--orphan-handling=warn -Wl,-no-pie /home/mysticp0004/NCS/v2.4.0/nrfxlib/crypto/nrf_cc310_platform/lib/cortex-m4/soft-float/no-interrupts/libnrf_cc310_platform_0.9.17.a && cd /home/mysticp0004/Desktop/Linux_Study/hello_world/build/zephyr && /home/mysticp0004/NCS/toolchains/1f9b40e71a/usr/local/bin/cmake -E echo /home/mysticp0004/NCS/toolchains/1f9b40e71a/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: attempted static link of dynamic object `../externlib/lib/libz.so' collect2: error: ld returned 1 exit status ninja: build stopped: subcommand failed. FATAL ERROR: command exited with status 1: /home/mysticp0004/NCS/toolchains/1f9b40e71a/usr/local/bin/cmake --build /home/mysticp0004/Desktop/Linux_Study/hello_world/build
my cmakelist was looks like this.
cmake_minimum_required(VERSION 3.20.0) find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) project(hello_world) target_sources(app PRIVATE src/main.c) set(CMAKE_PREFIX_PATH "externlib") find_package(ZLIB REQUIRED) include_directories(${ZLIB_INCLUDE_DIRS}) set(ZLIB_LIBRARY "externlib/lib/libz.a") set(ZLIB_INCLUDE_DIR "externlib/include") target_link_libraries(app PRIVATE ${ZLIB_LIBRARIES})