• ...
  • SDK
  • Yocto
  • ...
  • ...
  • your first application
  • tools
  • ...

Getting started with C/C++#

If you want to create a SimpleSwitch™ application using C/C++, please follow this guide to get you easily started.

Example Project#

Here is a very small C project, with a single C source file, test.c:

// SPDX-FileCopyrightText: (C) 2025 Tria Techonologies GmbH
// SPDX-License-Identifier: LicenseRef-Avnet-OSS-1.0
#include <stdio.h>
#include <unistd.h>

int main()
{
	while(1) {
		fprintf(stderr, "Test C SDK\n");
		sleep(5);
	}

	return 0;
}

And a Makefile:

# SPDX-FileCopyrightText: (C) 2022 Avnet Embedded GmbH
# SPDX-License-Identifier: LicenseRef-Avnet-OSS-1.0
BIN = c_test_prog
OBJS = test.o
PREFIX ?= ""

all: $(BIN)

$(BIN): $(OBJS)
	$(CC) -o $@ $<

clean:
	rm -f $(BIN) $(OBJS)

install: $(BIN)
	install -m 0755 -d "$(PREFIX)/opt/$(BIN)"
	install -m 0755 $(BIN) "$(PREFIX)/opt/$(BIN)"

.PHONY: clean install

One can build this project for the host system by putting both file in the same directory and running make

$ make
$ ./c_test_prog
Test C SDK

Build the project using a Makefile#

With a makefile aware of cross-compilation, building the binary is as simple as sourcing the SDK (see Source the SDK) and running make, e.g.

$ make

If the makefile has an install target using the PREFIX variable as installation path, it can be used directly with the --makefile-dir option of the Generate a SimpleSwitch™ package script

  $ simpleswitch-generate-package --name simpleswitch-example --makefile-dir . \
  --template C --startup-command /opt/c_test_prog/c_test_prog

Or if you want to be able to debug your application:

$ simpleswitch-generate-package --name simpleswitch-example --makefile-dir . \
  --template C --startup-command "while true; do gdbserver :2159 /opt/c_test_prog/c_test_prog ; done"

If your makefile lack of a compatible install target, see below.

Build the project using an external tool#

You can also build with any external tool and create a package by copying the content of a directory. All you need is this directory to reproduce the structure desired in the package.

Assuming that your external tool uses deploy_dir to store its output, we would require a directory structure like

$ find deploy_dir -printf "%y %p\n"
d deploy_dir
d deploy_dir/usr
d deploy_dir/opt/c_test_prog
f deploy_dir/opt/c_test_prog/c_test_prog

which mimics the structure of a linux root file system tree.

You can then use the --copy-dir option of the simpleswitch-generate-package the Generate a SimpleSwitch™ package

  $ simpleswitch-generate-package --name simpleswitch-example --copy-dir deploy_dir \
 --template C --startup-command /opt/c_test_prog/c_test_prog

Or if you want to be able to debug your application:

$ simpleswitch-generate-package --name simpleswitch-example --copy-dir deploy_dir \
 --template C --startup-command "while true; do gdbserver :2159 /opt/c_test_prog/c_test_prog ; done"

Deploy to the target#

Now it is time to deploy the generated SimpleSwitch™ container to the device. For this please see Deploy a SimpleSwitch™ package

Remote debugging a C/C++ application#

To remote debugging a C or a C++ application, you can see Remote debug a SimpleSwitch™ package

Further reading#