I pushed a new version to feature-coap-wip, with the typo fix. More importantly, the IP checksum handling has now been changed so that the IP header checksum is recomputed each and every time a packet is sent out. In my environment, this version works externally as well as the previous one: answers to ARP, UDP echo, and CoAP. The corner cases with IP checksums should be fixed now, thanks to Antti's suggestions off-list. Next on my list is to clean up the ENC28J60 code somewhat, mostly inlining some SPI functions so in order to reduce the code size. (At the moment enc28j60_spi.o is huge by our standards (over 800 bytes), as the compiler is not able to perform constant propagation on pins. Fixing this requires moving those functions inline, allowing constant propagation to optimise them when they are called from the user-level code in the CoAP header. But we really should move to LLVM also on ARM, to avoid this.) >>> g++: error: unrecognized command line option ‘--start-group’ >>> g++: error: unrecognized command line option ‘--end-group’ >>> make: *** [hello_world] Error 1 >> >> Hmm. What is your native g++ version? I guess --start-group and >> --end-group should be -Wl,--start-group and -Wl,--end-group for emulator >> linking in Linux. > Thanks, the version should be quite recent one: > eero@kiinakone:~/sw-engineering/sulautetut/ng-ell-i/Arduino/hardware/ell-i/stm32/examples/CoAP$ > g++ --version > g++ (GCC) 4.8.2 Looks recent enough to me. :-) Hence, the issue is that when linking for ARM, we use the ld command, when linking for the emulator, we use the g++ command. The reason for this is that when linking for the ARM, we want strict control over the libraries, while for the emulator we want to have whatever libraries GCC uses by default. The ld command takes --start-group and --end-group directly. The g++ command does not understand them, and therefore they must be prefixed -Wl, At the moment it is more important to link for ARM and test on the real board. --Pekka