Я пишу программу C с POSIX API и использую Linux. Я скомпилировал и запустил его на Mac OSX для Mac друга, и произошла небольшая ошибка, но я не использовал конкретные функции Linux.Как проверить совместимость POSIX?
Я буду использовать некоторые специфические функции, которые Linux добавляет к API. Я также буду использовать специальные расширения POSIX для Mac OS X и FreeBSD.
Я буду использовать условную компиляцию, чтобы выбрать код. Если ОС не является таковой, я буду использовать общий код POSIX.
Я не являюсь владельцем Darwin/Mac OSX и FreeBSD, Linux - единственная ОС, которую я имею на своем ПК. Я не могу загрузить и установить FreeBSD, потому что это более 500 МБ.
Я хочу знать, как проверить, будет ли программа компилироваться и вести себя так, как ожидалось, в других системах POSIX.
Интересно, есть ли симулятор POSIX и компилятор для проведения тестов.
Тесты просты, они не используют графический интерфейс и драйверы, они являются только командной строкой.
Мне нужно будет сделать 3 теста: FreeBSD, Mac OSX/Darwin и Generic POSIX, но у меня нет инструментов.
EDIT
Есть ли минимальная версия FreeBSD и Darwin без графического интерфейса, но с GCC/G ++ и SSH/УПП? Дарвин свободен, не так ли?
Мой компьютер устарел, но я думаю, что смогу установить их на виртуальной машине, создать виртуальную сеть и использовать ssh/scp для передачи и тестирования программ.
Это что-то вроде клише, но «нет портативного кода; только код, который был портирован ». Не существует замены для тестирования систем. В противном случае вам нужно закодировать подмножество стандарта, на котором вы можете положиться на разные системы. Лучше всего избегать условной компиляции; это усложняет жизнь, если вам нужно ее использовать. –
@ Джонатан: Хотя это правда в какой-то степени, это стало намного меньше, поэтому за последние 5-10 лет до такой степени, что многие традиционные вещи, которые люди делали ради «переносимости», к «странным системам», теперь кажутся как устаревший рывок. Я согласен, что есть аргументы, которые должны быть сделаны с обеих сторон, но я думаю, что кодирование стандартов и приставочных разработчиков для исправления их сломанных реализаций, когда они не соответствуют стандартам, имеет много достоинств как способ продвижения вперед в будущее, где нам не нужно играть в игру «port to every target». –
У этого также есть намного больше успеха, когда большие игроки получают на борту. С другой стороны, перехват GCC на множестве UB (например, нарушение переполнения и псевдонимов) сначала нарушил ситуацию, но прошел долгий путь, чтобы заставить программистов исправить свои сломанные программы. Некоторые аналогичные смелые действия со стороны приложения приложениями с большим именем могут иметь большие последствия. Кстати, использование этого подхода не обязательно означает, что ваша программа не будет работать на популярных сломанных платформах. Это просто означает, что вам нужно предоставить слой fix/glue, чтобы запустить ваш целевой код. –