On 6 May 2011 13:58, Steffen Dettmer wrote: > Hi, > > I have hopefully simple questions that I couldn't answer myself > using FAQs or google: > > is it in general allowed to mix old and new versions of toolchain tools? Yes, in general. > Is it needed to rebuilt binary libraries (libmy.a) when upgrading > toolchain version (starting from gcc 3.4.3)? What do yiou mean "toolchain version" ? There is no single version of the GNU toolchain, it consists of multiple independent pieces. > For example, using arm-elf-gcc-3.4.3 and ld-2.21 or vice versa? It's usually ok to use a newer ld with an older gcc, and vice versa, if that's what you mean. > (I made a quick check and it seems .code and .ro_data in my ELF > are bitwise equal, so I think there is no problem doing this, right)? > > Is it allowed to link libraries compiled with different compiler versions? > For example, liba.a compiled with arm-elf-gcc-3.4.3 and libb.a with > 4.3.x or 4.6.x? Yes, it's allowed. > If linking works, can I assume that the result will be valid > - or - > could it happen that the code links, passes first simple tests > but later fails under rare circumstances? > > Does it make a difference when not only considering C code but > also considering C++ code? Yes, a huge difference. The C++ ABI was not stable prior to G++ 3.4, but for all versions from 3.4 and later the same ABI is used. The runtime library, libstdc++, has huge changes since GCC 3.4, so if you are mixing compiler versions then you should always link with the newest compiler, so that the newest libstdc++ is used. That should work for shared libraries, I'm not sure how well it works with static libs.