arm-none-eabi-g ++: ошибка: CreateProcess: нет такого файла или каталога - PullRequest
0 голосов
/ 19 сентября 2019

У меня проблема с компилятором arm-none-eabi-g ++, работающим в Windows.Когда я запускаю свой make-файл в Ubuntu, все работает нормально.

Цель Makefile не работает в Windows с ошибкой

arm-none-eabi-g++: error: CreateProcess: No such file or directory

Я использую MingGW в Windows.MinGW, make и G ++ добавляются в Win PATH.

Компилятор и make одинаковые версии в обеих ОС.

Ubuntu

getconf ARG_MAX
2097152

arm-none-eabi-g++ --version
arm-none-eabi-g++ (GNU Tools for Arm Embedded Processors 7-2018-q3-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

make --version
GNU Make 4.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Windows 10 с MinGW

getconf ARG_MAX
32000

arm-none-eabi-g++ --version
arm-none-eabi-g++ (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

make --version
GNU Make 4.1
Built for i686-w64-mingw32
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Дополнительная информация

Вот так выглядит одна из моих целей make-файла

$(PROJECT).o: $(PROJECT).cpp
    @echo start of $(@F)
    $(CPP) $(CC_FLAGS) @./.symbols.txt -std=gnu++11 -fno-rtti @./.includes.txt -o $@ $<
    @echo end of $(@F)

Интересно то, что сборка Windows работает нормально только при размере.Комбинация символов .txt и .include.txt меньше 32 КБ.Так что может показаться, что это зависит от размера ARG_MAX (который находится на MINGW 32k), но, вероятно, это не так.Потому что другая цель в том же make-файле выглядит как

$(PROJECT).elf: $(SYS_OBJECTS)
    $(file > .sys_objects.txt, $(SYS_OBJECTS))
    $(LD) $(LD_FLAGS) -T$(LINKER_SCRIPT) $(LIBRARY_PATHS) -o $@ @./.sys_objects.txt $(LIBRARIES) $(LD_SYS_LIBS) $(LIBRARIES) $(LD_SYS_LIBS)

и она хорошо работает в Windows, несмотря на то, что размер sys_objects.txt составляет около 90 КБ.

И $ (LD), и переменные $ (CPP)) переменные установлены в arm-none-eabi-g ++.

Еще одна вещь, которую я заметил, заключается в том, что что-то в Windows добавляет такой файл, как C: \ Users \ user \ AppData \ Local \ Temp \ ccQWU5K6.s, вконец команды g ++ (независимо от того, провалилась она или нет).Я понятия не имею, откуда это взялось (может быть, какой-то аргумент поддержки MINGW?).

Кто-нибудь знает, почему сборка завершается неудачно в Windows с аргументами больше 32k, даже если другая цель отлично работает с большими аргументами?Может быть, это совпадение.

...