У меня есть исходный код, который предназначен для компиляции в Windows и Linux с использованием gcc. Он отлично работает даже под cygwin. Теперь, когда я пытаюсь скомпилировать для iOSMacro posix_c_source
echo $OSTYPE
darwin14
все кажется прекрасным, и сборка успешно получена. Однако, когда я попытался запустить приложение CUI, появится сообщение Ошибка сегментации 11.
После нескольких дней поиска в Интернете, случайно я нашел это link.
В результате, я сделал следующее изменение в одном из * .c файл
-#define _POSIX_C_SOURCE 199309
+#define _POSIX_C_SOURCE 199506
и новой сборки отлично работает. Хотя я не программист, мне интересно, что было бы столь значительным в разных этих макросах? Не могли бы вы прокомментировать, почему такое изменение становится настолько значительным.
Когда вы получаете сбой, такой как ошибка сегментации, ваше первое действие должно не переопределять специальные макросы. Вместо этого нужно * отлаживать * приложение, найти местоположение и причину сбоя. Просто потому, что он * кажется * работает, не гарантируется, что основная проблема на самом деле исправлена. У вас может быть неопределенное поведение в коде, и авария (или другое непредвиденное поведение) может вернуться, когда вы меньше всего этого ожидаете. –
Является ли ваш код многопоточным? Это могло бы объяснить это, потому что '199506' ввел потоки (и без этого ваша библиотека C не может включать конструкторы безопасности потока). В противном случае это трудно сказать, не глядя на какой-либо код. –
@Joachim: Thx для вашего предложения. Я знаю, что мой подход не профессионал. К сожалению, мои навыки отладки практически не существуют. – AjanO