This blog likes a manual used to record possible errors.
There are two reasons for this error:
arm-none-eabi-gcc
is installed;elf2uf2
being incorrect;It usually occurs when use brew
. In this case, use the following commands to uninstall and clean up the content installed by brew
:
# Uninstall arm-none-eabi-gcc
$ brew uninstall arm-none-eabi-gcc
# Remove some according content downloaded
$ brew cleanup arm-none-eabi-gcc
# brew install binary file to /usr/local/bin/ in default. Although have been uninstalled, but maybe have some remaining files. Remove manually
$ sudo rm /usr/local/bin/arm-none-eabi-*
Now we can download from offical website:
Open Arm GNU Toolchain Downloads, use the on-page search function to search for “macOS” because there are so many links. There are so many links just under macOS:
Select the link in AArch32 bare-metal target (arm-none-eabi)
for your corresponding platform (processor architecture) and click to download. Choose AArch32
because the Arm Cortex M0 included in RP2040 is 32-bit, which means AArch32
. If you download AArch64 bare-metal target (aarch64-none-elf)
, it will cannot compile successfully.
The solution to this problem is to set the environment variables CMAKE_C_COMPILER
and CMAKE_CXX_COMPILER
to let cmake
know which compiler specfied. Otherwise, the local Clang will be selected as the compiler by default, but this local Clang cannot compile the program we need.
There are two solutions at this time.
At this time, you can choose to add the following statements to your Shell configuration file (the following paths need to be modified according to your own settings):
export CC="/usr/local/bin/arm-none-eabi-gcc"
export CXX="/usr/local/bin/arm-none-eabi-g++"
or
export CMAKE_C_COMPILER="/usr/local/bin/arm-none-eabi-gcc"
export CMAKE_CXX_COMPILER="/usr/local/bin/arm-none-eabi-g++"
Then use source
to activate the change, or you can close the Terminal window and re-open it.
You can set it in the CMakeLists.txt
configuration file in the CMake project. Add the following commands before project(...)
:
set(CMAKE_C_COMPILER /usr/local/bin/arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER /usr/local/bin/arm-none-eabi-g++)
Then clear the directory build
and re-build.
fatal error: cannot read spec file 'nosys.specs': No such file or directory
shows that the nosys.specs
file cannot be read. This may be because when nosys.specs
needs to be read, nosys. specs
is not ready yet. This error usually occurs when using make
to finally build the binary file. The solution is to use make -j4
(personal test is at least 4
) to process 4 tasks at the same time, so this error disappears.
This error has many kinds of reasons, the mainly appearance is: compilation errors, check the information and find it caused by ld
or arm-none-eabi-ld
. This is because the -isysroot
parameter used by linker is wrong. Generally, this error is caused by link to the local SDK instead of the .so
file required by Linux.
This kind of error requires adding the following commands before project(...)
in the CMakeLists.txt
of project (the following paths need to be modified according to your own settings):
set(CMAKE_SYSROOT /usr/local/lib/arm-none-eabi/bfd-plugins/libdep.so)
Then empty the build
, and re-build.
I couldn’t remember all errors, because I didn’t take notes. I will complement later when I remembered them.
I hope these will help someone in need~