Failed to compile RF3.4
-
I followed the steps of https://github.com/Duet3D/RepRapFirmware/wiki/Building-RepRapFirmwareto build the project,compilation ended up with an error; The version of the cross-compilation tool GNU Arm Embedded Toolchain is 10.3.1
Is there anything else I need to change? -
@kmarkstte after download and unzip the projects, they need to be renamed to folder names without version and branch, so e.g.
RepRapFirmware 3.4-dev
should be renamed to folder name
RepRapFirmwareThis renaming for all projects. Then they find each other. This will probably fix your problem.
Another possible problem is that the projects may have different development releases inside 3.4-dev (not finding pow can be such an inconsistency). Make sure to download the same tag release of the projects, so they match. The most secure is to use the final 3.4.0 release.
-
@joergs5 thank you for your reply. The name of the folder was already RepRapFirmware.
I switched the project to 3.4.0, the compilation is still the same error.Are some related library files missing?
For example the referenced math library -
@kmarkstte please cut and past the entire linker command line and error messages into a post.
-
@dc42 ok
19:06:07 **** Incremental Build of configuration Duet3_MB6HC for project RepRapFirmware ****
make -j12 all
Building target: Duet3Firmware_MB6HC.elf
Invoking: Cross G++ Linker
arm-none-eabi-gcc -L"D:\ZQY\YIZHI\Eclipse\Firmware\CoreN2G\SAME70_CAN_SDHC_USB_RTOS" -L"D:\ZQY\YIZHI\Eclipse\Firmware\RRFLibraries\SAME70_RTOS" -L"D:\ZQY\YIZHI\Eclipse\Firmware\FreeRTOS\SAME70" -L"D:\ZQY\YIZHI\Eclipse\Firmware\CANlib\SAME70_RTOS" --specs=nosys.specs -Os -Wl,--gc-sections -Wl,--fatal-warnings -mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard -T"D:\ZQY\YIZHI\Eclipse\Firmware\RepRapFirmware\src\Hardware\SAME70\same70q20b_flash.ld" -Wl,-Map,"D:\ZQY\YIZHI\Eclipse\Firmware\RepRapFirmware\Duet3_MB6HC/Duet3Firmware_MB6HC.map" -o "Duet3Firmware_MB6HC.elf" -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group ./src/libcpp/eh_alloc.o ./src/libcpp/vterminate.o ./src/libc/memcmp.o ./src/libc/memcpy.o ./src/libc/memmove.o ./src/libc/memset.o ./src/libc/nano-mallocr.o ./src/libc/strptime.o ./src/bossa/Applet.o ./src/bossa/BossaFlash.o ./src/bossa/Device.o ./src/bossa/EefcFlash.o ./src/bossa/Flasher.o ./src/bossa/Samba.o ./src/bossa/WordCopyApplet.o ./src/bossa/WordCopyArm.o ./src/Tools/Filament.o ./src/Tools/Spindle.o ./src/Tools/Tool.o ./src/Storage/CRC16.o ./src/Storage/CRC32.o ./src/Storage/EmbeddedFiles.o ./src/Storage/FileInfoParser.o ./src/Storage/FileStore.o ./src/Storage/MassStorage.o ./src/SBC/DataTransfer.o ./src/SBC/SbcInterface.o ./src/PrintMonitor/PrintMonitor.o ./src/Platform/Event.o ./src/Platform/Heap.o ./src/Platform/Logger.o ./src/Platform/OutputMemory.o ./src/Platform/Platform.o ./src/Platform/PortControl.o ./src/Platform/RepRap.o ./src/Platform/Roland.o ./src/Platform/Scanner.o ./src/Platform/Tasks.o ./src/Platform/UniqueId.o ./src/ObjectModel/GlobalVariables.o ./src/ObjectModel/ObjectModel.o ./src/ObjectModel/Variable.o ./src/Networking/LwipEthernet/Lwip/src/netif/bridgeif.o ./src/Networking/LwipEthernet/Lwip/src/netif/bridgeif_fdb.o ./src/Networking/LwipEthernet/Lwip/src/netif/ethernet.o ./src/Networking/LwipEthernet/Lwip/src/netif/lowpan6.o ./src/Networking/LwipEthernet/Lwip/src/netif/lowpan6_ble.o ./src/Networking/LwipEthernet/Lwip/src/netif/lowpan6_common.o ./src/Networking/LwipEthernet/Lwip/src/netif/slipif.o ./src/Networking/LwipEthernet/Lwip/src/netif/zepif.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv6/dhcp6.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv6/ethip6.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv6/icmp6.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv6/inet6.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv6/ip6.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv6/ip6_addr.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv6/ip6_frag.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv6/mld6.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv6/nd6.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv4/autoip.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv4/dhcp.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv4/etharp.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv4/icmp.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv4/igmp.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv4/ip4.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv4/ip4_addr.o ./src/Networking/LwipEthernet/Lwip/src/core/ipv4/ip4_frag.o ./src/Networking/LwipEthernet/Lwip/src/core/altcp.o ./src/Networking/LwipEthernet/Lwip/src/core/altcp_alloc.o ./src/Networking/LwipEthernet/Lwip/src/core/altcp_tcp.o ./src/Networking/LwipEthernet/Lwip/src/core/def.o ./src/Networking/LwipEthernet/Lwip/src/core/dns.o ./src/Networking/LwipEthernet/Lwip/src/core/inet_chksum.o ./src/Networking/LwipEthernet/Lwip/src/core/init.o ./src/Networking/LwipEthernet/Lwip/src/core/ip.o ./src/Networking/LwipEthernet/Lwip/src/core/mem.o ./src/Networking/LwipEthernet/Lwip/src/core/memp.o ./src/Networking/LwipEthernet/Lwip/src/core/netif.o ./src/Networking/LwipEthernet/Lwip/src/core/pbuf.o ./src/Networking/LwipEthernet/Lwip/src/core/raw.o ./src/Networking/LwipEthernet/Lwip/src/core/stats.o ./src/Networking/LwipEthernet/Lwip/src/core/sys.o ./src/Networking/LwipEthernet/Lwip/src/core/tcp.o ./src/Networking/LwipEthernet/Lwip/src/core/tcp_in.o ./src/Networking/LwipEthernet/Lwip/src/core/tcp_out.o ./src/Networking/LwipEthernet/Lwip/src/core/timeouts.o ./src/Networking/LwipEthernet/Lwip/src/core/udp.o ./src/Networking/LwipEthernet/Lwip/src/apps/netbiosns/netbiosns.o ./src/Networking/LwipEthernet/Lwip/src/apps/mdns/mdns.o ./src/Networking/LwipEthernet/Lwip/src/api/api_lib.o ./src/Networking/LwipEthernet/Lwip/src/api/api_msg.o ./src/Networking/LwipEthernet/Lwip/src/api/err.o ./src/Networking/LwipEthernet/Lwip/src/api/if_api.o ./src/Networking/LwipEthernet/Lwip/src/api/netbuf.o ./src/Networking/LwipEthernet/Lwip/src/api/netdb.o ./src/Networking/LwipEthernet/Lwip/src/api/netifapi.o ./src/Networking/LwipEthernet/Lwip/src/api/sockets.o ./src/Networking/LwipEthernet/Lwip/src/api/tcpip.o ./src/Networking/LwipEthernet/GMAC/ethernet_sam.o ./src/Networking/LwipEthernet/LwipEthernetInterface.o ./src/Networking/LwipEthernet/LwipSocket.o ./src/Networking/FtpResponder.o ./src/Networking/HttpResponder.o ./src/Networking/Network.o ./src/Networking/NetworkBuffer.o ./src/Networking/NetworkInterface.o ./src/Networking/NetworkResponder.o ./src/Networking/TelnetResponder.o ./src/Networking/UploadingNetworkResponder.o ./src/Movement/StepperDrivers/DriverMode.o ./src/Movement/StepperDrivers/TMC22xx.o ./src/Movement/StepperDrivers/TMC2660.o ./src/Movement/StepperDrivers/TMC51xx.o ./src/Movement/Kinematics/CoreKinematics.o ./src/Movement/Kinematics/FiveBarScaraKinematics.o ./src/Movement/Kinematics/HangprinterKinematics.o ./src/Movement/Kinematics/Kinematics.o ./src/Movement/Kinematics/LinearDeltaKinematics.o ./src/Movement/Kinematics/PolarKinematics.o ./src/Movement/Kinematics/RotaryDeltaKinematics.o ./src/Movement/Kinematics/RoundBedKinematics.o ./src/Movement/Kinematics/ScaraKinematics.o ./src/Movement/Kinematics/ZLeadscrewKinematics.o ./src/Movement/HeightControl/HeightController.o ./src/Movement/BedProbing/Grid.o ./src/Movement/BedProbing/RandomProbePointSet.o ./src/Movement/AxisShaper.o ./src/Movement/DDA.o ./src/Movement/DDARing.o ./src/Movement/DriveMovement.o ./src/Movement/ExtruderShaper.o ./src/Movement/Move.o ./src/Movement/MoveSegment.o ./src/Movement/RawMove.o ./src/Movement/StepTimer.o ./src/Libraries/sha1/sha1.o ./src/Libraries/sd_mmc/ctrl_access.o ./src/Libraries/sd_mmc/sd_mmc.o ./src/Libraries/sd_mmc/sd_mmc_mem.o ./src/Libraries/sd_mmc/sd_mmc_spi.o ./src/Libraries/Fatfs/diskio.o ./src/Libraries/Fatfs/fattime_rtc.o ./src/Libraries/Fatfs/ff.o ./src/Libraries/Fatfs/ffunicode.o ./src/InputMonitors/InputMonitor.o ./src/Heating/Sensors/AdditionalOutputSensor.o ./src/Heating/Sensors/CpuTemperatureSensor.o ./src/Heating/Sensors/CurrentLoopTemperatureSensor.o ./src/Heating/Sensors/DhtSensor.o ./src/Heating/Sensors/LinearAnalogSensor.o ./src/Heating/Sensors/RemoteSensor.o ./src/Heating/Sensors/RtdSensor31865.o ./src/Heating/Sensors/SensorWithPort.o ./src/Heating/Sensors/SpiTemperatureSensor.o ./src/Heating/Sensors/TemperatureSensor.o ./src/Heating/Sensors/Thermistor.o ./src/Heating/Sensors/ThermocoupleSensor31855.o ./src/Heating/Sensors/ThermocoupleSensor31856.o ./src/Heating/Sensors/TmcDriverTemperatureSensor.o ./src/Heating/FOPDT.o ./src/Heating/Heat.o ./src/Heating/Heater.o ./src/Heating/HeaterMonitor.o ./src/Heating/LocalHeater.o ./src/Heating/RemoteHeater.o ./src/Heating/TemperatureError.o ./src/Hardware/SharedSpi/SharedSpiClient.o ./src/Hardware/SharedSpi/SharedSpiDevice.o ./src/Hardware/SAME70/Ethernet/ksz8081rna/ethernet_phy.o ./src/Hardware/SAME70/Ethernet/GmacInterface.o ./src/Hardware/SAME70/Devices.o ./src/Hardware/SAME70/Main.o ./src/Hardware/ExceptionHandlers.o ./src/Hardware/I2C.o ./src/Hardware/IoPorts.o ./src/Hardware/NonVolatileMemory.o ./src/Hardware/SoftwareReset.o ./src/GPIO/GpInPort.o ./src/GPIO/GpOutPort.o ./src/GCodes/GCodeBuffer/BinaryParser.o ./src/GCodes/GCodeBuffer/ExpressionParser.o ./src/GCodes/GCodeBuffer/GCodeBuffer.o ./src/GCodes/GCodeBuffer/StringParser.o ./src/GCodes/GCodeException.o ./src/GCodes/GCodeFileInfo.o ./src/GCodes/GCodeInput.o ./src/GCodes/GCodeMachineState.o ./src/GCodes/GCodeQueue.o ./src/GCodes/GCodes.o ./src/GCodes/GCodes2.o ./src/GCodes/GCodes3.o ./src/GCodes/GCodes4.o ./src/GCodes/ObjectTracker.o ./src/GCodes/RestorePoint.o ./src/GCodes/StraightProbeSettings.o ./src/GCodes/Trigger.o ./src/FilamentMonitors/Duet3DFilamentMonitor.o ./src/FilamentMonitors/FilamentMonitor.o ./src/FilamentMonitors/LaserFilamentMonitor.o ./src/FilamentMonitors/PulsedFilamentMonitor.o ./src/FilamentMonitors/RotatingMagnetFilamentMonitor.o ./src/FilamentMonitors/SimpleFilamentMonitor.o ./src/Fans/Fan.o ./src/Fans/FansManager.o ./src/Fans/LedStripDriver.o ./src/Fans/LocalFan.o ./src/Fans/RemoteFan.o ./src/Endstops/Endstop.o ./src/Endstops/EndstopsManager.o ./src/Endstops/LocalZProbe.o ./src/Endstops/RemoteZProbe.o ./src/Endstops/StallDetectionEndstop.o ./src/Endstops/SwitchEndstop.o ./src/Endstops/ZProbe.o ./src/Endstops/ZProbeEndstop.o ./src/Config/Pins.o ./src/Comms/AuxDevice.o ./src/Comms/FirmwareUpdater.o ./src/Comms/PanelDueUpdater.o ./src/ClosedLoop/ClosedLoop.o ./src/CAN/CanDriversData.o ./src/CAN/CanInterface.o ./src/CAN/CanMessageGenericConstructor.o ./src/CAN/CanMotion.o ./src/CAN/CommandProcessor.o ./src/CAN/ExpansionManager.o ./src/Accelerometers/Accelerometers.o ./src/Accelerometers/LIS3DH.o ./src/RepRapFirmware.o -Wl,--end-group -lm -lCoreN2G -lRRFLibraries -lFreeRTOS -lCANlib -lsupc++
d:/program files (x86)/gnu arm embedded toolchain/10 2021.10/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld.exe: D:\ZQY\YIZHI\Eclipse\Firmware\RRFLibraries\SAME70_RTOS\libRRFLibraries.a(NumericConverter.o): in functionNumericConverter::GetFloat() const': NumericConverter.cpp:(.text._ZNK16NumericConverter8GetFloatEv+0x80): warning: undefined reference to
pow'
d:/program files (x86)/gnu arm embedded toolchain/10 2021.10/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld.exe: D:\ZQY\YIZHI\Eclipse\Firmware\RRFLibraries\SAME70_RTOS\libRRFLibraries.a(SafeVsnprintf.o): in functionFormattedPrinter::PrintFloat(double, char)': SafeVsnprintf.cpp:(.text._ZN16FormattedPrinter10PrintFloatEdc+0x9a): warning: undefined reference to
llrint'
d:/program files (x86)/gnu arm embedded toolchain/10 2021.10/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld.exe: SafeVsnprintf.cpp:(.text._ZN16FormattedPrinter10PrintFloatEdc+0x1ee): warning: undefined reference tollrint' d:/program files (x86)/gnu arm embedded toolchain/10 2021.10/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/bin/ld.exe: SafeVsnprintf.cpp:(.text._ZN16FormattedPrinter10PrintFloatEdc+0x2c8): warning: undefined reference to
llrint'
collect2.exe: error: ld returned 1 exit status
makefile:109: recipe for target 'Duet3Firmware_MB6HC.elf' failed
make[1]: *** [Duet3Firmware_MB6HC.elf] Error 1
makefile:96: recipe for target 'all' failed
make: *** [all] Error 2
"make -j12 all" terminated with exit code 2. Build might be incomplete.19:06:10 Build Failed. 6 errors, 4 warnings. (took 3s.72ms)
-
@kmarkstte thanks. I don't see anything wrong with that linker commend, it is the same as on my build machine except for the paths.
The problem might be that you are compiling RRFLibraries with the wrong floating point options. Please check that you are using the correct compiler options, by looking at the compiler command line when one of the files in that project is compiled in the SAME70_RTOS configuration. This is the command line that I see when file NumericConverter.cpp is compiled:
arm-none-eabi-g++ -std=gnu++17 -D__SAME70Q21__ -DRTOS -I"C:\Eclipse\Firmware\FreeRTOS\src\include" -I"C:\Eclipse\Firmware\FreeRTOS\src\portable\GCC\ARM_CM7\r0p1" -O2 -Wall -c -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -mfp16-format=ieee -mno-unaligned-access -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wundef -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=NumericConverter.s" -MMD -MP -MF"src/General/NumericConverter.d" -MT"src/General/NumericConverter.o" -o "src/General/NumericConverter.o" "../src/General/NumericConverter.cpp"
The options
-mfpu=fpv5-d16 -mfloat-abi=hard
match the ones in your linker command line.
-
@dc42
Thank you very much for your reply。
I checked the compiled output of RRFLibraries and our compiled configuration is the same.
arm-none-eabi-g++ -std=gnu++17 -D__SAME70Q21__ -DRTOS -I"D:\ZQY\YIZHI\Eclipse\Firmware\FreeRTOS\src\include" -I"D:\ZQY\YIZHI\Eclipse\Firmware\FreeRTOS\src\portable\GCC\ARM_CM7\r0p1" -O2 -Wall -c -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -mfp16-format=ieee -mno-unaligned-access -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wundef -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=StringFunctions.s" -MMD -MP -MF"src/General/StringFunctions.d" -MT"src/General/StringFunctions.o" -o "src/General/StringFunctions.o" "../src/General/StringFunctions.cpp" -
@kmarkstte this is where the linker finds those functions on my system:
c:/program files (x86)/gnu arm embedded toolchain/10 2021.10/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard\libm.a(lib_a-pow.o)
c:/program files (x86)/gnu arm embedded toolchain/10 2021.10/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard\libm.a(lib_a-s_llrint.o) -
-
@Kmarkstte : I have exactly the issue, did you find a solution?
@dc42 : I don't see any libm.a under "C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\lib\gcc\arm-none-eabi\10.3.1\thumb\v7e-m+dp\hard"Thanks
Giuliano -
This post is deleted! -
@giuliano you are looking at the wrong location because you haven't taken account of some occurrences of ..\ in the path that I quoted. The correct location on my machine is C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\arm-none-eabi\lib\thumb\v7e-m+dp\hard.
-
@dc42 : you're right, it's there. Don't know how I could miss it
Any Idea what I could try to solve that undefined reference to `pow' and 'llrint' ?
Do I need to add a reference to libm.a somewhere?Thanks
Giuliano -
@giuliano I don't know why you are getting those errors and I am not, however I do know that sometimes the Gnu linker can fail to pick up a library function because it scanned the libraries in the wrong order. If that's the case then adding libm at the end of the library list might help.
-
@giuliano PS there is also a --verbose switch that you could add to the linker command, in case the output gives a hint about what is failing. See https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_node/ld_3.html.
-
-
I copied libm from the GNU Arm Embedded Toolchain to one of the projects build folder (C:\Eclipse\Firmware\RRFLibraries\SAME70_RTOS) and added libm to the library list again as you suggersted and it works this way.
Not sure why the build process wasn't reading it from the original folder, although in the log i saw the entry:
attempt to open c:/program files (x86)/gnu arm embedded toolchain/10 2021.10/bin/../lib/gcc/arm-none-eabi/10.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+dp/hard\libm.a succeededYou can close this thread i think.
Thanks a lot for your help
-
@giuliano @dc42 I have encountered the same errors. I am very new to this entire process and I am confused by what you mean by adding libm to the "library list". What / where is this list you are adding it to? I have the libm file and I have moved it to the RRFLibraries folder, so it is just the library list I need guidance to.
-
@gingergradstudent I mean add it to the list of libraries in the linker settings, after supc++. It probably isn't necessary to copy it anywhere.
-
Further to my previous reply, this linker error only occurs when using Eclipse 2022-06, whereas I have been building with Eclipse 2022-03. A fix is to add "m" (not "libm" as I suggested previously) without quotes to the linker library list. I will add this to the project configuration.
-
@dc42 I installed Eclipse 2022-03 instead of Eclipse 2022-06 and that fixed everything. Thanks!