Это продолжение попытки скомпилировать нелицензионную GPL-версию кросс-компилятора микроконтроллера Microchip XC32 g++ XC32 v4.35 из исходного кода.
См. мои вопросы и ответы здесь, а также мой репозиторий здесь: https://github.com/ElectricRCAircraftGu ... 2_Compiler.
Обратите внимание, что это прекрасно работает в Linux Ubuntu 22.04 с gcc --version gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0. Однако при компиляции в Windows в среде MSYS2 UCRT64 (настроенной в соответствии с моими инструкциями здесь) с помощью gcc --version gcc.exe (Rev2, создано проектом MSYS2) 13.2. 0, теперь я получаю следующую ошибку в gcc/gcc/system.h:
./../../pic32m-source/gcc/gcc/prefix.c ../../../pic32m-source/gcc/gcc/system.h:737:30: ошибка: ожидаемый идентификатор перед строковой константой 737 | #define abort() Fancy_abort (__FILE__, __LINE__, __FUNCTION__) | ^~~~~~~~ ../../../pic32m-source/gcc/gcc/system.h:737:30: ошибка: ожидается ',' или '...' перед строковой константой ../../../pic32m-source/gcc/gcc/system.h:737:30: ошибка: ожидаемый идентификатор перед строковой константой 737 | #define abort() Fancy_abort (__FILE__, __LINE__, __FUNCTION__) | ^~~~~~~~ ../../../pic32m-source/gcc/gcc/system.h:737:30: ошибка: ожидается ',' или '...' перед строковой константой make[1]: *** [Makefile
/* Переопределить прерывание, чтобы сообщить о внутренней ошибке без дампа памяти, и сообщая о местоположении ошибки в исходном файле. */ extern voidancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN ATTRIBUTE_COLD; #define abort() Fancy_abort (__FILE__, __LINE__, __FUNCTION__) Это определение abort() вызывается, например, внутри класса шаблона C++ в строке 460 fibonacci_heap.h, здесь:
шаблон В* fibonacci_heap::delete_node (fibonacci_node *node, bool Release) { V *ret = node->m_data; /* Чтобы выполнить удаление, мы просто присваиваем ему ключ min и извлекаем его. */ replace_key (узел, m_global_min_key); если (узел != m_min) { fprintf (stderr, «Невозможно установить минимум в куче fib.\n»); прервать (); // ${SRC_DIR}/${GCC_DIR}/gcc/system.h.tmp; mv ${SRC_DIR}/${GCC_DIR}/gcc/system.h.tmp ${SRC_DIR}/${GCC_DIR}/gcc/system.h фи Перевод комментариев с японского на английский:
# # В новой среде mingw произойдет следующая ошибка. # ../../../src/gcc-10.2.0/gcc/system.h:743:30: ошибка: ожидаемый идентификатор перед строковой константой №743 | #define abort() Fancy_abort (__FILE__, __LINE__, __FUNCTION__) # В качестве обходного пути удалите ошибочную строку. # abort() ведет себя как реализация, объявленная в stdlib.h. Приведенный выше код просто находит #define abort() Fancy_abort (__FILE__, __LINE__, __FUNCTION__) в gcc/system.h и комментирует его как /* #define abort() Fancy_abort (__FILE__, __LINE__, __FUNCTION__) */, тем самым удаляя его.
Просто закомментировать это оскорбительное определение макроса кажется очень хакерским. Я не до конца понимаю последствия этого изменения.