On Fri, 18 Jan 2019 at 13:19, Christer Solskogen <christer.solskogen@xxxxxxxxx> wrote: > > On 18.01.2019 14:04, Jonathan Wakely wrote: > > On Fri, 18 Jan 2019 at 09:04, Christer Solskogen wrote: > >> > >> I posted this on the binutils list as well, but the one answer I got > >> pointed the finger to gcc. > >> > >> I've got gcc and binutils compiled with --with-sysroot, but gcc (or > >> libgcc in this case) cannot find crti.o, crtn.o and libc in the sysroot > >> even if the files are there. > >> > >> binutils is configured like this: > >> /home/builder/binutils-2.31/configure --prefix=/opt/cross > >> --target=x86_64-blug-linux-gnu > >> --with-sysroot=/opt/cross/x86_64-blug-linux-gnu > >> > >> gcc is configured like this: /home/builder/gcc-8/configure > >> --prefix=/opt/cross --libexecdir=/opt/cross/lib > >> --target=x86_64-blug-linux-gnu --enable-languages=c,c++ > >> --with-sysroot=/opt/cross/x86_64-blug-linux-gnu --disable-multilib > >> > >> In /opt/cross/x86_64-blug-linux-gnu/usr/lib I've got the files that it > >> needs: crt1.o crti.o crtn.o libc.so > > > > Shouldn't that be $sysroot/usr/lib64 for x86_64-*-linux-gnu? > > > > I've thought of that, so I tried symlinking $sysroot/usr/lib64 to > $sysroot/usr/lib. Still same error. It also happens on non-multilib > targets like arm-linux-gnueabihf. > > > Run this command manually and add -v or -Wl,-v to see where GCC tells > > the linker to find them. > > > > /tmp/gcc-obj.x86_64-blug-linux-gnu/./gcc/xgcc -Wl,-v > -B/tmp/gcc-obj.x86_64-blug-linux-gnu/./gcc/ > -B/opt/cross/x86_64-blug-linux-gnu/bin/ > -B/opt/cross/x86_64-blug-linux-gnu/lib/ -isystem > /opt/cross/x86_64-blug-linux-gnu/include -isystem > /opt/cross/x86_64-blug-linux-gnu/sys-include -O2 -g -O2 -DIN_GCC > -DCROSS_DIRECTORY_STRUCTURE -W -Wall -Wwrite-strings -Wcast-qual > -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition > -isystem ./include -fpic -mlong-double-80 -DUSE_ELF_SYMVER -g > -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector -shared > -nodefaultlibs -Wl,--soname=libgcc_s.so.1 > -Wl,--version-script=libgcc.map -o ./libgcc_s.so.1.tmp -g -O2 -B./ > _muldi3_s.o _negdi2_s.o _lshrdi3_s.o _ashldi3_s.o _ashrdi3_s.o > _cmpdi2_s.o _ucmpdi2_s.o _clear_cache_s.o _trampoline_s.o __main_s.o > _absvsi2_s.o _absvdi2_s.o _addvsi3_s.o _addvdi3_s.o _subvsi3_s.o > _subvdi3_s.o _mulvsi3_s.o _mulvdi3_s.o _negvsi2_s.o _negvdi2_s.o > _ctors_s.o _ffssi2_s.o _ffsdi2_s.o _clz_s.o _clzsi2_s.o _clzdi2_s.o > _ctzsi2_s.o _ctzdi2_s.o _popcount_tab_s.o _popcountsi2_s.o > _popcountdi2_s.o _paritysi2_s.o _paritydi2_s.o _powisf2_s.o _powidf2_s.o > _powixf2_s.o _mulhc3_s.o _mulsc3_s.o _muldc3_s.o _mulxc3_s.o _divhc3_s.o > _divsc3_s.o _divdc3_s.o _divxc3_s.o _bswapsi2_s.o _bswapdi2_s.o > _clrsbsi2_s.o _clrsbdi2_s.o _fixunssfsi_s.o _fixunsdfsi_s.o > _fixunsxfsi_s.o _fixsfdi_s.o _fixdfdi_s.o _fixxfdi_s.o _fixunssfdi_s.o > _fixunsdfdi_s.o _fixunsxfdi_s.o _floatdisf_s.o _floatdidf_s.o > _floatdixf_s.o _floatundisf_s.o _floatundidf_s.o _floatundixf_s.o > _divdi3_s.o _moddi3_s.o _divmoddi4_s.o _udivdi3_s.o _umoddi3_s.o > _udivmoddi4_s.o _udiv_w_sdiv_s.o cpuinfo_s.o sfp-exceptions_s.o > addtf3_s.o divtf3_s.o multf3_s.o negtf2_s.o subtf3_s.o unordtf2_s.o > fixtfsi_s.o fixunstfsi_s.o floatsitf_s.o floatunsitf_s.o fixtfdi_s.o > fixunstfdi_s.o floatditf_s.o floatunditf_s.o fixtfti_s.o fixunstfti_s.o > floattitf_s.o floatuntitf_s.o extendsftf2_s.o extenddftf2_s.o > extendxftf2_s.o trunctfsf2_s.o trunctfdf2_s.o trunctfxf2_s.o getf2_s.o > letf2_s.o eqtf2_s.o _divtc3_s.o _multc3_s.o _powitf2_s.o > enable-execute-stack_s.o unwind-dw2_s.o unwind-dw2-fde-dip_s.o > unwind-sjlj_s.o unwind-c_s.o emutls_s.o libgcc.a -lc && rm -f > ./libgcc_s.so && if [ -f ./libgcc_s.so.1 ]; then mv -f ./libgcc_s.so.1 > ./libgcc_s.so.1.backup; else true; fi && mv ./libgcc_s.so.1.tmp > ./libgcc_s.so.1 && (echo "/* GNU ld script"; echo " Use the shared > library, but some functions are only in"; echo " the static library. > */"; echo "GROUP ( libgcc_s.so.1 -lgcc )" ) > ./libgcc_s.so > collect2 version 8.2.1 20190114 > /tmp/gcc-obj.x86_64-blug-linux-gnu/./gcc/collect-ld -plugin > /tmp/gcc-obj.x86_64-blug-linux-gnu/./gcc/liblto_plugin.so > -plugin-opt=/tmp/gcc-obj.x86_64-blug-linux-gnu/./gcc/lto-wrapper > -plugin-opt=-fresolution=/tmp/ccSDI4vt.res > --sysroot=/tmp/gcc-obj.x86_64-blug-linux-gnu/gcc/../x86_64-blug-linux-gnu > --eh-frame-hdr -m elf_x86_64 -shared -o ./libgcc_s.so.1.tmp crti.o > /tmp/gcc-obj.x86_64-blug-linux-gnu/./gcc/crtbeginS.o > -L/tmp/gcc-obj.x86_64-blug-linux-gnu/./gcc > -L/opt/cross/x86_64-blug-linux-gnu/bin > -L/opt/cross/x86_64-blug-linux-gnu/lib -L. -v --soname=libgcc_s.so.1 > --version-script=libgcc.map _muldi3_s.o _negdi2_s.o _lshrdi3_s.o > _ashldi3_s.o _ashrdi3_s.o _cmpdi2_s.o _ucmpdi2_s.o _clear_cache_s.o > _trampoline_s.o __main_s.o _absvsi2_s.o _absvdi2_s.o _addvsi3_s.o > _addvdi3_s.o _subvsi3_s.o _subvdi3_s.o _mulvsi3_s.o _mulvdi3_s.o > _negvsi2_s.o _negvdi2_s.o _ctors_s.o _ffssi2_s.o _ffsdi2_s.o _clz_s.o > _clzsi2_s.o _clzdi2_s.o _ctzsi2_s.o _ctzdi2_s.o _popcount_tab_s.o > _popcountsi2_s.o _popcountdi2_s.o _paritysi2_s.o _paritydi2_s.o > _powisf2_s.o _powidf2_s.o _powixf2_s.o _mulhc3_s.o _mulsc3_s.o > _muldc3_s.o _mulxc3_s.o _divhc3_s.o _divsc3_s.o _divdc3_s.o _divxc3_s.o > _bswapsi2_s.o _bswapdi2_s.o _clrsbsi2_s.o _clrsbdi2_s.o _fixunssfsi_s.o > _fixunsdfsi_s.o _fixunsxfsi_s.o _fixsfdi_s.o _fixdfdi_s.o _fixxfdi_s.o > _fixunssfdi_s.o _fixunsdfdi_s.o _fixunsxfdi_s.o _floatdisf_s.o > _floatdidf_s.o _floatdixf_s.o _floatundisf_s.o _floatundidf_s.o > _floatundixf_s.o _divdi3_s.o _moddi3_s.o _divmoddi4_s.o _udivdi3_s.o > _umoddi3_s.o _udivmoddi4_s.o _udiv_w_sdiv_s.o cpuinfo_s.o > sfp-exceptions_s.o addtf3_s.o divtf3_s.o multf3_s.o negtf2_s.o > subtf3_s.o unordtf2_s.o fixtfsi_s.o fixunstfsi_s.o floatsitf_s.o > floatunsitf_s.o fixtfdi_s.o fixunstfdi_s.o floatditf_s.o floatunditf_s.o > fixtfti_s.o fixunstfti_s.o floattitf_s.o floatuntitf_s.o extendsftf2_s.o > extenddftf2_s.o extendxftf2_s.o trunctfsf2_s.o trunctfdf2_s.o > trunctfxf2_s.o getf2_s.o letf2_s.o eqtf2_s.o _divtc3_s.o _multc3_s.o > _powitf2_s.o enable-execute-stack_s.o unwind-dw2_s.o > unwind-dw2-fde-dip_s.o unwind-sjlj_s.o unwind-c_s.o emutls_s.o libgcc.a > -lc /tmp/gcc-obj.x86_64-blug-linux-gnu/./gcc/crtendS.o crtn.o > GNU ld (GNU Binutils) 2.31.1.20190116 > /opt/cross/x86_64-blug-linux-gnu/bin/ld: cannot find crti.o: No such > file or directory > /opt/cross/x86_64-blug-linux-gnu/bin/ld: cannot find -lc > /opt/cross/x86_64-blug-linux-gnu/bin/ld: cannot find crtn.o: No such > file or directory > collect2: error: ld returned 1 exit status > > >> > >> But still: > >> /tmp/gcc-obj.x86_64-blug-linux-gnu/./gcc/xgcc > >> -B/tmp/gcc-obj.x86_64-blug-linux-gnu/./gcc/ > >> -B/opt/cross/x86_64-blug-linux-gnu/bin/ > >> -B/opt/cross/x86_64-blug-linux-gnu/lib/ -isystem > >> /opt/cross/x86_64-blug-linux-gnu/include -isystem > >> /opt/cross/x86_64-blug-linux-gnu/sys-include -O2 -g -O2 -DIN_GCC > >> -DCROSS_DIRECTORY_STRUCTURE -W -Wall -Wwrite-strings -Wcast-qual > >> -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition > >> -isystem ./include -fpic -mlong-double-80 -DUSE_ELF_SYMVER -g > >> -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector -shared > >> -nodefaultlibs -Wl,--soname=libgcc_s.so.1 > >> -Wl,--version-script=libgcc.map -o ./libgcc_s.so.1.tmp -g -O2 -B./ > >> _muldi3_s.o _negdi2_s.o _lshrdi3_s.o _ashldi3_s.o _ashrdi3_s.o > >> _cmpdi2_s.o _ucmpdi2_s.o _clear_cache_s.o _trampoline_s.o __main_s.o > >> _absvsi2_s.o _absvdi2_s.o _addvsi3_s.o _addvdi3_s.o _subvsi3_s.o > >> _subvdi3_s.o _mulvsi3_s.o _mulvdi3_s.o _negvsi2_s.o _negvdi2_s.o > >> _ctors_s.o _ffssi2_s.o _ffsdi2_s.o _clz_s.o _clzsi2_s.o _clzdi2_s.o > >> _ctzsi2_s.o _ctzdi2_s.o _popcount_tab_s.o _popcountsi2_s.o > >> _popcountdi2_s.o _paritysi2_s.o _paritydi2_s.o _powisf2_s.o _powidf2_s.o > >> _powixf2_s.o _mulhc3_s.o _mulsc3_s.o _muldc3_s.o _mulxc3_s.o _divhc3_s.o > >> _divsc3_s.o _divdc3_s.o _divxc3_s.o _bswapsi2_s.o _bswapdi2_s.o > >> _clrsbsi2_s.o _clrsbdi2_s.o _fixunssfsi_s.o _fixunsdfsi_s.o > >> _fixunsxfsi_s.o _fixsfdi_s.o _fixdfdi_s.o _fixxfdi_s.o _fixunssfdi_s.o > >> _fixunsdfdi_s.o _fixunsxfdi_s.o _floatdisf_s.o _floatdidf_s.o > >> _floatdixf_s.o _floatundisf_s.o _floatundidf_s.o _floatundixf_s.o > >> _divdi3_s.o _moddi3_s.o _divmoddi4_s.o _udivdi3_s.o _umoddi3_s.o > >> _udivmoddi4_s.o _udiv_w_sdiv_s.o cpuinfo_s.o sfp-exceptions_s.o > >> addtf3_s.o divtf3_s.o multf3_s.o negtf2_s.o subtf3_s.o unordtf2_s.o > >> fixtfsi_s.o fixunstfsi_s.o floatsitf_s.o floatunsitf_s.o fixtfdi_s.o > >> fixunstfdi_s.o floatditf_s.o floatunditf_s.o fixtfti_s.o fixunstfti_s.o > >> floattitf_s.o floatuntitf_s.o extendsftf2_s.o extenddftf2_s.o > >> extendxftf2_s.o trunctfsf2_s.o trunctfdf2_s.o trunctfxf2_s.o getf2_s.o > >> letf2_s.o eqtf2_s.o _divtc3_s.o _multc3_s.o _powitf2_s.o > >> enable-execute-stack_s.o unwind-dw2_s.o unwind-dw2-fde-dip_s.o > >> unwind-sjlj_s.o unwind-c_s.o emutls_s.o libgcc.a -lc && rm -f > >> ./libgcc_s.so && if [ -f ./libgcc_s.so.1 ]; then mv -f ./libgcc_s.so.1 > >> ./libgcc_s.so.1.backup; else true; fi && mv ./libgcc_s.so.1.tmp > >> ./libgcc_s.so.1 && (echo "/* GNU ld script"; echo " Use the shared > >> library, but some functions are only in"; echo " the static library. > >> */"; echo "GROUP ( libgcc_s.so.1 -lgcc )" ) > ./libgcc_s.so > >> /opt/cross/x86_64-blug-linux-gnu/bin/ld: cannot find crti.o: No such > >> file or directory > >> /opt/cross/x86_64-blug-linux-gnu/bin/ld: cannot find -lc > >> /opt/cross/x86_64-blug-linux-gnu/bin/ld: cannot find crtn.o: No such > >> file or directory > >> collect2: error: ld returned 1 exit status > >> make[1]: *** [Makefile:985: libgcc_s.so] Error 1 > >> make[1]: Leaving directory > >> '/tmp/gcc-obj.x86_64-blug-linux-gnu/x86_64-blug-linux-gnu/libgcc' > >> make: *** [Makefile:14671: all-target-libgcc] Error 2 > >> > >> > >> If I instead configure binutils and gcc to use > >> --with-sysroot=/opt/cross/x86_64-blug-linux-gnu/sysroot or > >> /opt/cross/x86_64-blug-linux-gnu.sysroot, (and have the startup files in > >> there instead) I do not get the error. So it seems like gcc doesn't like > >> if sysroot is the same as tooldir. > >> > >> Is this a bug or intended behavior? > > > > I am not surprised if it doesn't work, since sysroot is for > > cross-compilers, and you wouldn't usually want the host toolchain in > > the same directory as the headers and libraries for the target, > > because host != target. > > > > In /opt/cross/x86_64-blug-linux-gnu you only find bin/ which contains > hard links to binutils. Everything else is stuff for the target like the > cross compiled libstdc++. I don't see a good reason why to keep the > cross compiled glibc away from the cross compiled libstdc++. Because libstdc++ is part of GCC and so is part of the host GCC installation. Glibc is not part of GCC, and so is part of the target sysroot. GCC expects to be able to find libstdc++ in its own installation tree, it expects to find libc.so in the sysroot. > Keep in mind that, that does not mean that there doesn't exist a good > reason, I've just failed to see it. > > The documentation does not state anything about where $sysroot should > be. Perhaps a note that it shouldn't (or can't) be the same thing as > $PREFIX/$TARGET is in place? >