Лучшей практикой является создание кроссплатформенной библиотеки.Я хотел бы придерживаться статических библиотек, если вы можете помочь.Затем создайте разнообразные приложения для конкретной платформы.
Лучше «извлекать» функциональность из библиотеки, а не писать расширения поверх библиотеки.Таким образом, вы можете выбрать то, что имеет отношение к платформе.
Я бы посмотрел на Qt для интерфейса GUI.Это безусловно лучший инструментарий, который я использовал.