Каковы некоторые рекомендации по переносу кода C++ на MacOS?[закрыто]

StackOverflow https://stackoverflow.com/questions/145621

  •  02-07-2019
  •  | 
  •  

Вопрос

В рамках будущего проекта планируется перенести существующий код C++, который компилируется в Windows и Linux, на MacOS (leopard).Программное обеспечение представляет собой приложение командной строки, но может быть запланирован интерфейс с графическим интерфейсом.MacOS использует компилятор g++.При наличии того же компилятора, что и в Linux, не возникает никаких проблем, но они всегда есть.

Есть ли какие-либо рекомендации или проблемы, на которые следует обратить внимание во время порта?

Это было полезно?

Решение

Есть ли у вашего приложения графический интерфейс и какой (родной/Qt/Gtk+)?

В противном случае проблемы, на которые следует обратить внимание (по сравнению с Linux), в основном относятся к области динамического связывания.OS X использует «-dylib» и «-bundle» и фактически имеет два типа динамических библиотек (загружаемые во время выполнения и обычные).В Linux есть только один тип (-shared), и в любом случае он более свободен в этом отношении.

Если ваше приложение имеет графический интерфейс, вам придется перекодировать все это в Cocoa, используя Objective-C.Это означает, что вы будете в новом язык также.Некоторые люди (например, MS) использовали Carbon (C++ API), но его использование постепенно прекращается.Я бы не рекомендовал это новым проектам.

Лучше всего использовать Qt или Gtk+.Родной порт Gtk+ был (повторно) анонсирован всего несколько дней назад (см. Имендио).

п.с.OS X, конечно, тоже запускает двоичные файлы X11, но предложить это любому из ваших клиентов может быть трудным путем.Они привыкли к интерфейсу Aqua и работают с ним продуктивно.Считайте X11 лишь очень краткосрочным решением.

п.п.с.Количество дополнительных библиотек с открытым исходным кодом, поставляемых с OS X, ограничено, и их версии могут отставать.В то время как в Linux вы можете легко потребовать от пользователей установить libxxx v.y.y, в OS X существует несколько подходов к упаковке (fink, macports), а для коммерческого инструмента ожидается, что необходимые библиотеки будут содержаться в приложении.OS X предлагает для этого «пакеты приложений» и «фреймворки» (локальные копии, делающие приложение самодостаточным).В Linux нет такой концепции.Это также окажет большое влияние на вашу систему сборки;возможно, ты захочешь попробовать что-то вроде SCons для всех платформ?

Другие советы

Вам не нужно перекодировать все в Objective-C.Существует странная гибридизация C++ и Objective-C, которая позволит вам использовать код C++ из Objective-C, поэтому вы можете разумно разделить код модели на C++ и код представления/контроллера в Objective-C.Чтобы использовать Objective-C, просто добавьте к файлам исходного кода суффикс .mm вместо .m, и вы сможете смешивать большинство допустимых синтаксисов C++ и Objective-C даже в одной строке.

Мы не портировали на MacOS, но портировали на различные Unix-системы из Linux, основной областью работы была установка и запуск систем, поэтому рассчитывайте, что большая часть работы будет сосредоточена на них (учитывая, что ваша существующая система уже переносима между Linux). и Windows).

Macintosh (macosx) по сути представляет собой FreeBSD (хотя и с некоторыми изменениями).Существуют некоторые различия в системном программировании между Linux и FreeBSD.В первую очередь эти различия существуют между различными системными вызовами...поэтому насколько это повлияет на вас, будет зависеть от того, что делает ваше приложение и какие системные вызовы ОС вы выполняете во время выполнения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top