Originally, uClibc provided a build wrapper that let people use their existing compilers to link programs against uClibc, by rewriting the command line arguments before calling gcc, but this was abandoned for the following reason:
Long ago in the dark ages, gcc introduced libgcc.a as a place to store functions the compiler could magically insert calls to behind the scenes, such as the code to perform a 64 bit integer division on a 32 bit platform, and the stack unwinding code C++ forced C to bloat its longjmp() with. Later, gcc 3 introduced a dynamic version of this library, libgcc_s.so, so it didn't have to statically link this code into each binary that used it. And that's where it all went pear shaped. The problem is that dynamic libraries can require other dynamic libraries, and libgcc_s.so requires libc.so. This means that if your compiler was built against glibc, then libgcc_s.so will link against glibc, and anything that causes the compiler to suck in libgcc_s.so will leak a reference to glibc into your uClibc program. There's no way to stop libgcc_s.so from leaking a reference to libc, all you can do is build a version of gcc against uClibc so that its libgcc_s.so is leaking a reference to the _right_ C library. And hence the build wrapper was abandoned in favor of buildroot, a tool to build a new uClibc compiler from source code. Now _my_ question is, why not just have the wrapper link against libgcc.a by default? Go ahead and dynamically link the other libraries, but always statically link this one so it doesn't leak this problematic reference to glibc. The compiler has to have a libgcc.a in order to support static linking at all. Yes, the resulting binaries are slightly larger, but as a quick and dirty way to get a build environment it still works just fine. Does anybody see a reason why the build wrapper should _not_ be added back to uClibc, with this change, so people don't have to create a separate toolchain just to try out uClibc? Rob _______________________________________________ uClibc mailing list [email protected] http://busybox.net/cgi-bin/mailman/listinfo/uclibc
