Jon Dufresne wrote: > On Tue, Nov 18, 2008 at 11:13 AM, Andrew Haley <aph@xxxxxxxxxx> wrote: >> Jon Dufresne wrote: >> >>> I am creating a cross toolchain using gnu. So far it has been working great. >>> >>> However, one problem I noticed is that libstdc++ isn't installed into >>> the specified sysroot duing "make install". >>> >>> After I have binutils, a static gcc, linux-headers, and glibc compiled >>> this is how I build gcc: >>> >>> ${BUILD}/gcc-${GCC_VERSION}/configure \ >>> --prefix=${TOOLS} \ >>> --build=${HOST} \ >>> --host=${HOST} \ >>> --target=${TARGET} \ >>> --with-sysroot=${ROOTFS} \ >>> --enable-languages=c,c++ \ >>> --disable-multilib \ >>> --disable-nls \ >>> --enable-shared \ >>> --enable-threads=posix \ >>> --enable-__cxa_atexit \ >>> --disable-libunwind-exceptions \ >>> --enable-c99 \ >>> --enable-long-long >>> >>> make >>> make install >>> >>> The things to notice are that I use the "--with-sysroot" option and enable c++. >>> >>> After the compile finishes libstdc++ is installed to >>> ${TOOLS}/${TARGET}/lib and I need to manually copy it over to the >>> ${ROOTFS}/usr/lib. Is this a bug in the gcc Makefile? Should libstdc++ >>> install to the sysroot by default like the c runtime library does? Or >>> is this preferred behavior? >> It's doing what it's supposed to do. All target libs are installed in >> the prefix, along with the cross-compiler. The libs have to be there because >> the cross-compiler needs them. >> >> So, you need the target libs in two places: in /usr/lib on the target and >> in prefix/*lib on the cross compiling host. > > Makes sense, but why doesn't the Makefile install the target libs into > both places, since that is what is needed? Because usually the place you have to install the target libs is not the sysroot but /usr/lib on the target machine: the target machine may be in another building or even on another planet. How you get the target libs to the target is up to you; it may involve burning a CD, an FTP transfer, or a carrier pigeon. ;-) > Copying them manually is > easy enough, but if they libraries are required in two places, it > seems the installation should put them in two places. Sure, but the sysroot isn't the other place! The sysroot is used when building the cross-compiler as the source for target libs and headers; the destination is the prefix. Andrew.