完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
编译错误解决办法:fork/exec:…arm-none-eabi-g++.exe: The filename or extension is too long
解决方案来自Edge Impulse 当使用Arduino编译STM或Arduino文件时,当要编译的目标文件列表超过命令行中的Windows最大字符数(32k)时,通常会引发此错误。 如果使用的2.0版本以下IDE版本,可参考以下方法: 如果是Arduino则使用前两种方法即可,Adafruit、esp32、STM32参照后面的方法 1.在Arduino mbed目录下,即:C:Users(自己的用户名)AppDataLocalArduino15packagesarduinohardwarembed1.1.4 (版本号可能不同) 创建platform.local.txt 并粘贴以下代码 : ## Customized platform.local.txt to compile for mbed targets under Windows ## This recipe works around the Windows limit of 32k characters in a cmd line by calling .o files from a text file during linking ## Install: put file under your mbed sub-directory - ie: C:UsersMYUSERAppDataLocalArduino15packagesarduinohardwarembed1.1.4 ## You can also find the local arduino folder in the IDE under File -> Preferences -> see preferences.txt location in the bottom part of the window ## hooks # create a txt file with all object file paths from libraries and sketch folders (corevariant.cpp.o needed too for linking) recipe.hooks.linking.prelink.1.pattern=cmd /c dir /b /s {build.path}sketch*.o > {build.path}obj_files_tmp.txt recipe.hooks.linking.prelink.2.pattern=cmd /c "dir /b /s {build.path}libraries*.o >> {build.path}obj_files_tmp.txt 2>nul & exit 0" recipe.hooks.linking.prelink.3.pattern=cmd /c echo "{build.path}corevariant.cpp.o" >> {build.path}obj_files_tmp.txt # replace by \ in file paths (otherwise escaped by linker) and save in new txt file recipe.hooks.linking.prelink.4.pattern=cmd /v /c "@echo off && for /f %a in ({build.path}obj_files_tmp.txt) do (set line=%a && set line=!line:=\! && echo !line! >> {build.path}obj_files.txt)" # delete txt file after linking recipe.hooks.linking.postlink.1.pattern=cmd /c del {build.path}obj_files.txt ## modify compile patterns (@{build.path}obj_files.txt) recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" "-L{build.path}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} "@{compiler.mbed.ldflags}" "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" --specs=nano.specs --specs=nosys.specs {compiler.ldflags} -o "{build.path}/{build.project_name}.elf" @{build.path}obj_files.txt -Wl,--whole-archive "{build.path}/{archive_file}" {compiler.mbed} -Wl,--no-whole-archive -Wl,--start-group {compiler.mbed.extra_ldflags} {compiler.libraries.ldflags} -Wl,--end-group 如图所示: 2.在Arduino samd目录下,即:C:Users(自己的用户名)AppDataLocalArduino15packagesarduinohardwaresamd1.1.4 创建platform.local.txt 并粘贴以下代码 : ## Customized platform.local.txt to compile for SAMD21 targets under Windows ## This recipe works around the Windows limit of 32k characters in a cmd line by calling .o files from a text file during linking ## Install: put file under your mbed sub-directory - ie: C:UsersMYUSERAppDataLocalArduino15packagesarduinohardwaresamd1.8.9 ## You can also find the local arduino folder in the IDE under File -> Preferences -> see preferences.txt location in the bottom part of the window ## hooks # create a txt file with all object file paths from libraries and sketch folders (corevariant.cpp.o needed too for linking) recipe.hooks.linking.prelink.1.pattern=cmd /c dir /b /s {build.path}sketch*.o > {build.path}obj_files_tmp.txt recipe.hooks.linking.prelink.2.pattern=cmd /c "dir /b /s {build.path}libraries*.o >> {build.path}obj_files_tmp.txt 2>nul & exit 0" recipe.hooks.linking.prelink.3.pattern=cmd /c echo "{build.path}corevariant.cpp.o" >> {build.path}obj_files_tmp.txt # replace by \ in file paths (otherwise escaped by linker) and save in new txt file recipe.hooks.linking.prelink.4.pattern=cmd /v /c "@echo off && for /f %a in ({build.path}obj_files_tmp.txt) do (set line=%a && set line=!line:=\! && echo !line! >> {build.path}obj_files.txt)" # delete txt file after linking recipe.hooks.linking.postlink.1.pattern=cmd /c del {build.path}obj_files.txt ## modify compile patterns (@{build.path}obj_files.txt) recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" "-L{build.path}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" --specs=nano.specs --specs=nosys.specs {compiler.ldflags} -o "{build.path}/{build.project_name}.elf" @{build.path}obj_files.txt {compiler.libraries.ldflags} -Wl,--start-group {compiler.arm.cmsis.ldflags} -lm "{build.path}/{archive_file}" -Wl,--end-group 3.如果是Adafruit,则 在Arduino Adafruit samd目录下,即:C:Users(自己的用户名)AppDataLocalArduino15packagesadafruithardwaresamd1.6.3 创建platform.local.txt 并粘贴以下代码 : ## Customized platform.local.txt to compile for Adafruit SAMD51 targets under Windows ## This recipe works around the Windows limit of 32k characters in a cmd line by calling .o files from a text file during linking ## Install: put file under your mbed sub-directory - ie: C:UsersMYUSERAppDataLocalArduino15packagesarduinohardwaresamd1.8.9 ## You can also find the local arduino folder in the IDE under File -> Preferences -> see preferences.txt location in the bottom part of the window ## hooks # create a txt file with all object file paths from libraries and sketch folders (corevariant.cpp.o needed too for linking) recipe.hooks.linking.prelink.1.pattern=cmd /c dir /b /s {build.path}sketch*.o > {build.path}obj_files_tmp.txt recipe.hooks.linking.prelink.2.pattern=cmd /c "dir /b /s {build.path}libraries*.o >> {build.path}obj_files_tmp.txt 2>nul & exit 0" recipe.hooks.linking.prelink.3.pattern=cmd /c echo "{build.path}corevariant.cpp.o" >> {build.path}obj_files_tmp.txt # replace by \ in file paths (otherwise escaped by linker) and save in new txt file recipe.hooks.linking.prelink.4.pattern=cmd /v /c "@echo off && for /f %a in ({build.path}obj_files_tmp.txt) do (set line=%a && set line=!line:=\! && echo !line! >> {build.path}obj_files.txt)" # delete txt file after linking recipe.hooks.linking.postlink.1.pattern=cmd /c del {build.path}obj_files.txt ## modify compile patterns (@{build.path}obj_files.txt) recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" "-L{build.path}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" --specs=nano.specs --specs=nosys.specs {compiler.ldflags} -o "{build.path}/{build.project_name}.elf" @{build.path}obj_files.txt {compiler.libraries.ldflags} -Wl,--start-group {compiler.arm.cmsis.ldflags} "-L{build.variant.path}" -lm "{build.path}/{archive_file}" -Wl,--end-group |
|
|
|
4.创建platform.local.txt 并粘贴以下代码 :
## Customized platform.local.txt to compile for ESP32 targets under Windows ## This recipe works around the Windows limit of 32k characters in a cmd line, creating an archive with sketch and libraries object files before linking ## Install: put file under your esp32 sub-directory - ie:C:UsersMYUSERAppDataLocalArduino15packagesesp32hardwareesp321.0.4 ## You can also find the local arduino folder in the IDE under File -> Preferences -> see preferences.txt location in the bottom part of the window ## hooks # create a txt file with all object file paths from libraries and sketch folders recipe.hooks.linking.prelink.1.pattern=cmd /c dir /b /s {build.path}sketch*.o > {build.path}obj_files_tmp.txt recipe.hooks.linking.prelink.2.pattern=cmd /c "dir /b /s {build.path}libraries*.o >> {build.path}obj_files_tmp.txt 2>nul & exit 0" # replace by \ in file paths (otherwise escaped by linker) and save in new txt file recipe.hooks.linking.prelink.3.pattern=cmd /v /c "@echo off && for /f %a in ({build.path}obj_files_tmp.txt) do (set line=%a && set line=!line:=\! && echo !line! >> {build.path}obj_files.txt)" # save object files in archive recipe.hooks.linking.prelink.4.pattern=cmd /v /c "@echo off && for /f %a in ({build.path}obj_files.txt) do ({compiler.path}{compiler.ar.cmd} {compiler.ar.flags} {compiler.ar.extra_flags} {build.path}custom_lib.a %a)" # delete txt file and archive after linking recipe.hooks.linking.postlink.1.pattern=cmd /c del {build.path}obj_files.txt recipe.hooks.linking.postlink.2.pattern=cmd /c del {build.path}custom_lib.a ## modify compile patterns (use custom_lib.a instead of object_files) recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} -Wl,--start-group "{build.path}custom_lib.a" "{archive_file_path}" {compiler.c.elf.libs} -Wl,--end-group -Wl,-EL -o "{build.path}/{build.project_name}.elf" 5.如果是STM32,则在Arduino STM32目录下,即:C:Users(自己的用户名)AppDataLocalArduino15packagesesp32hardwarestm321.9.0 创建platform.local.txt 并粘贴以下代码 : ## Customized platform.local.txt to compile for STM32 targets under Windows ## This recipe works around the Windows limit of 32k characters in a cmd line by calling .o files from a text file during linking ## Install: put file under your mbed sub-directory - ie: C:UsersMYUSERAppDataLocalArduino15packagesarduinohardwarestm321.9.0 ## You can also find the local arduino folder in the IDE under File -> Preferences -> see preferences.txt location in the bottom part of the window ## hooks # create a txt file with all object file paths from libraries and sketch folders recipe.hooks.linking.prelink.1.pattern=cmd /c dir /b /s {build.path}sketch*.o > {build.path}obj_files_tmp.txt recipe.hooks.linking.prelink.2.pattern=cmd /c "dir /b /s {build.path}libraries*.o >> {build.path}obj_files_tmp.txt 2>nul & exit 0" recipe.hooks.linking.prelink.3.pattern=cmd /c echo "{build.path}corevariant.cpp.o" >> {build.path}obj_files_tmp.txt recipe.hooks.linking.prelink.4.pattern=cmd /c echo "{build.path}corePeripheralPins.c.o" >> {build.path}obj_files_tmp.txt # replace by \ in file paths (otherwise escaped by linker) and save in new txt file recipe.hooks.linking.prelink.5.pattern=cmd /v /c "@echo off && for /f %a in ({build.path}obj_files_tmp.txt) do (set line=%a && set line=!line:=\! && echo !line! >> {build.path}obj_files.txt)" # delete txt file after linking recipe.hooks.linking.postlink.1.pattern=cmd /c del {build.path}obj_files.txt ## modify compile patterns (@{build.path}obj_files.txt) recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} "-Wl,--default-script={build.variant.path}/{build.ldscript}" "-Wl,--script={build.system.path}/ldscript.ld" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} {compiler.ldflags} {compiler.arm.cmsis.ldflags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -Wl,--start-group @{build.path}obj_files.txt {compiler.libraries.ldflags} "{archive_file_path}" -lc -Wl,--end-group -lm -lgcc -lstdc++ 进行以上操作后,测试编译成功 |
|
|
|
只有小组成员才能发言,加入小组>>
3208 浏览 9 评论
2895 浏览 16 评论
3401 浏览 1 评论
8840 浏览 16 评论
3994 浏览 18 评论
9625浏览 3评论
998浏览 3评论
518浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
521浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2244浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-29 07:36 , Processed in 0.862520 second(s), Total 51, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号