title: What is the rationale behind removing crt0.o from gcc4.7.x?
body: <p>I am trying to upgrade to <a href="http://www.yagarto.de/" rel="noreferrer">yagarto4.7.2</a> (Yet Another GNU ARM toolchain, for those wondering), which is gcc and binutils, ported for Windows. However, trying to compile a simple Hello World yields:</p>
  
  <pre><code>c:/yagarto-20121222/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi
  /bin/ld.exe: cannot find crt0.o: No such file or directory
  collect2.exe: error: ld returned 1 exit status
  </code></pre>
  
  <p>Now, in this <a href="https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/strange%20errot%20%28crt0%29%20when%20buiding%20a%20project&amp;FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&amp;currentviews=2616" rel="noreferrer">forum</a> it is made clear that this is the startup initialziation library, that was removed after gcc4.6.x. Two solutions are proposed:</p>
  
  <ul>
  <li>compile with -nostartfiles  </li>
  <li>copy the crt0.o form the 4.6.x to the 4.7.x folder</li>
  </ul>
  
  <p>Both look quite dirty and unacceptable for production code. So does anyone know <strong><em>why was this library removed and what is it's equivalent now?</em></strong></p>