2015-03-26 2 views
0

Я работаю над lpcxpresso (lpc1768). Я включил файл .h и два файла .c в мой уже написанный код (эти файлы были созданы с использованием flex и bison). Я хочу использовать опцию «Newlib (semihost)» под «быстрыми настройками». Когда я построить мой код он показывает некоторые ошибки:ошибка: конфликтующие типы для int32_t

"c:\nxp\lpcxpresso_6.1.2_177\lpcxpresso\tools\bin../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/include/newlib_inc/stdint.h:79:21: error: conflicting types for 'int32_t'"

"c:\nxp\lpcxpresso_6.1.2_177\lpcxpresso\tools\bin../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/include/newlib_inc/stdint.h:80:23: error: conflicting types for 'uint32_t'"

Когда я переключаюсь в библиотеку Redlib тогда не происходят эти ошибки, но возникают другие проблемы. Я хочу использовать Newlib.

Почему эти ошибки возникают? Что мне нужно сделать?

+3

grep для 'typedef * int32_t' в ваши файлы и заголовки –

+0

Нужно ли определять тип файлов, которые я предоставляю в качестве входных данных для flex и bison, после чего генерируются файлы .c и .h? – user3843784

+0

Если grep не под рукой, вы можете прочитать вывод препроцессора, чтобы увидеть (a), как выглядят типы typedefs 'int32_t' (b), где расположены typedefs. После этого вы должны исключить, что нужно отбросить. – harper

ответ

1

Эта ошибка возникает из-за множественных дефиниций int32_t и uint32_t в разных файлах заголовков. Проверьте журнал сборки, чтобы найти информацию о том, где произошло это многократное определение/объявление. Посмотрите, можете ли вы использовать файл заголовка системы для этих определений типов, и в случае, если в вашем заголовке есть дополнительный код, используйте условные макросы для отключения части typedef. Надеюсь это поможет.