Как решить проблему с "конфликтом типов разделов" и рекомендации по использованию атрибута section с gcc
Я использую Android NDKr8 и расширение gcc для компиляции некоторого библиотечного кода, который используется несколькими платформами, включая некоторые встроенные. Этот код использует сегменты для помещения нескольких элементов в непрерывное пространство памяти. Компиляция генерирует "ошибка: переменная_имя вызывает конфликт типа раздела".
Мы используем макрос для объявления атрибута сегмента:
# define DB_SEGMENT __attribute__ ((__section__ ("DBSegment")))
Вышеуказанное имя переменной объявлено следующим образом:
dbStruct const variable_name[] DB_SEGMENT = {
{conststringvalue0, sizeof(conststringvalue0)},
…more like this
};
dbStruct - это
typedef struct dbStruct
{
const char * const address;
const UINT16 stringSize;
} dbStruct;
conststringvalue0 объявлено так:
const char conststringvalue0[] DB_SEGMENT = "some string value";
Этот же код компилируется в Xcode, используя его компилятор по умолчанию, с небольшими изменениями в объявлении макроса DB_SEGMENT. Это глубже, чем я привык, поэтому любая помощь будет оценена. У Google есть некоторые ссылки на ошибку, но ее исправление не ясно. Есть ли лучшая стратегия для установки определенного непрерывного раздела памяти?
В ответ на комментарий, единственное отличие от правильно скомпилированной версии в XCode:
#define DB_SEGMENT __attribute__ ((section ("DBSegment,DBSection")))
1 ответ
У меня та же проблема. И моя ситуация - я помещаю код и переменные в один и тот же раздел. После того, как я поместил переменную в другой раздел, проблема исчезла. Надеюсь это поможет.
"# определить атрибут DB_SEGMENT ((раздел ("DBSegment")))"
Я вижу пробел между # и определяю, что не правильно.
Удалите это место и попробуйте скомпилировать.