Если вы можете найти, где на самом деле используются записываемые строки, другой возможностью будет использование strdup и free в подмножестве буквенных строк, которые код на самом деле редактирует.Это может быть сложнее, чем версия GCC с более ранней версией, но сделает код намного более переносимым.
Редактировать В ответ на уточняющий вопрос / комментарий ниже, если вы увидели что-то вроде:
char* str = "XXX";
str[1] = 'Y';
str[2] = 'Z';
// ... use of str ...
Вы бы заменили вышеприведенное на что-то вроде:
char* str = strdup("XXX");
str[1] = 'Y';
str[2] = 'Z';
// ... use of str ...
free(str);
И где у вас ранее было:
char* str = "Some string that isn't modified";
Вы бы заменили вышеприведенное на:
const char* str = "Some string that isn't modified";
Если вы сделали эти исправления, "-fwritable-strings" больше не понадобятся.