2010-04-22 2 views
4

Я пишу программу Linux, которая в настоящее время компилируется и отлично работает на x86 и x86_64, и теперь мне интересно, есть ли что-то особенное, что мне нужно сделать, чтобы заставить его работать с другими архитектурами ,Потенциальные проблемы с переносом на разные архитектуры

То, что я слышал, что для кросса-коды платформы я должен:

  • Ничего о размере указателя, междунар или size_t
  • Не делать предположение о порядке байт не предполагаю (Я не делаю никакого смещения бит - я полагаю, что gcc оптимизирует мою силу для двух умножений/деления для меня)
  • Не используйте монтажные блоки (очевидно)
  • Убедитесь, что ваши библиотеки работают (я используя SQLite, libcurl и Boost, которые кажутся довольно кросс-платформенными)

Есть ли что-нибудь еще, о чем мне нужно беспокоиться? В настоящее время я не нацелен на какие-либо другие архитектуры, но я ожидаю, что в какой-то момент я буду поддерживать ARM, и я полагаю, что я мог бы также заставить его работать над любой архитектурой, если можно.

Кроме того, что касается моего второго пункта о порядке байтов, мне нужно сделать что-нибудь особенное с вводом текста? Я читаю файлы с getline(), поэтому кажется, что это тоже нужно делать автоматически.

ответ

3

По моему опыту, когда код хорошо работает на нескольких архитектурах, он будет легче переноситься на третий. Ввод не должен быть проблемой. Выравнивание структуры может быть проблемой, если вы делаете что-либо, когда проблема выравнивания является проблемой.

Обратите внимание на все, что может зависеть от платформы: полагаясь на то, что битовые поля выравниваются одинаково, при условии, что переменные являются конкретным размером и т. Д. Если ваш код относительно абстрактен от аппаратного обеспечения, вы, вероятно, столкнетесь с несколькими проблемами. Если вы делаете что-то вроде сетевого кода, вам нужно убедиться, что вы правильно упорядочиваете сетевой порядок байтов.

Я портировал драйверы устройств с PPC на x86, а затем на x86_64; в нескольких тысячах строк, возможно, произошло несколько изменений, в основном связанных со структурой и целым порядком.

Единственный способ узнать наверняка - попробовать, конечно.

+0

Да, я надеялся, что, поскольку мой сетевой код просто завиток, и мой ввод все использует cin или getline, о которых не о чем беспокоиться. –