On 9/8/2010 10:26, Nils Woetzel wrote: > wanted to contribute to the multilib cross compiler issue. I just > joined the list to share my solution to the problem of a failed build > for the gcc stage 2 - and hopefully the documentation/Makefile can be > adjusted. > > My procedure for building the cross compiler pretty much follows the > documentation, except for one difference: > I used the branches/release version and the howto > http://mingw-w64.svn.sourceforge.net/viewvc/mingw-w64/branches/releases/v1.0/mingw-w64-doc/howto-build/mingw-w64-howto-build.txt?revision=3506&view=markup > > This howto says in line 235, to create a mingw link > ln -s /mypath/x86_64-w64-mingw32 /mypath/mingw > > I am not sure if this is really necessary, or if it has changed > recently, but what is required to build stage 2 of gcc is to make a > link in the gcc build directory to mingw, so basically > > cd gcc-4.5.1-build > ln -s /mypath/x86_64-w64-mingw32 ./mingw > > assuming, that you are building/configuring gcc in the folder > gcc-4.5.1-build - otherwise whatever path > I guess the howto assumes that /mypath is also the configure and build > directory, than you do not have that problem, but if your > build/configure directory is somewhere totally else, than gcc does not > know here to find the mingw folder > > make and make install runs smoothly afterwards!! >
No, the symlink is done after install, you shouldn't be doing any symlinks during build time, unless I am misunderstanding something. > After make install, the last thing I did was, to make symlinks in > sysroot or prefix > ln -s /mypath/lib/gcc/x86_64-w64-mingw32/lib32/libgcc_s.a > /mypath/x86_64-w64-mingw32/lib32/ > and > ln -s /mypath/lib/gcc/x86_64-w64-mingw32/lib64/libgcc_s.a > /mypath/x86_64-w64-mingw32/lib64/ > > compiler and linker works (at least -m32, I have not tried the 64bit) > This is a known issue when --enable-runtime-specific-libs is used, happens in Linux as well. > Here are the details > It took me some time to figure that out, but after getting this error > all the time > for this command: > ln -s -f libgcc.map libgcc.map.def&& if [ ! -d 32/shlib ]; then mkdir > 32/shlib; else true; fi&& > /blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/./gcc/xgcc > -B/blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/./gcc/ > -L/blue/meilerlab/apps/Linux2/x86_64/mingw-w64/2010.09.07/x86_64-w64-mingw32/lib > -L/blue/meilerlab/apps/Linux2/x86_64/mingw-w64/2010.09.07/mingw/lib > -isystem > /blue/meilerlab/apps/Linux2/x86_64/mingw-w64/2010.09.07/x86_64-w64-mingw32/include > -isystem /blue/meilerlab/apps/Linux2/x86_64/mingw-w64/2010.09.07/mingw/include > -B/blue/meilerlab/apps/Linux2/x86_64/mingw-w64/2010.09.07/x86_64-w64-mingw32/bin/ > -B/blue/meilerlab/apps/Linux2/x86_64/mingw-w64/2010.09.07/x86_64-w64-mingw32/lib/ > -isystem > /blue/meilerlab/apps/Linux2/x86_64/mingw-w64/2010.09.07/x86_64-w64-mingw32/include > -isystem > /blue/meilerlab/apps/Linux2/x86_64/mingw-w64/2010.09.07/x86_64-w64-mingw32/sys-include > -O2 -I../../../../../gcc/gcc-4.5.1/gcc/../winsup/w32api/include -g > -O2 -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -W -Wall -Wwrite-strings > -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes > -Wold-style-definition -isystem ./include -g -DHAVE_GTHR_DEFAULT > -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -shared -nodefaultlibs > libgcc.map.def -Wl,--out-implib,32/shlib/libgcc_s.a.tmp -o > 32/shlib/libgcc_s_sjlj-1.dll.tmp -g -O2 -m32 -B./ _chkstk_s.o > _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 _enable_execute_stack_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 _powitf2_s.o _mulsc3_s.o > _muldc3_s.o _mulxc3_s.o _multc3_s.o _divsc3_s.o _divdc3_s.o > _divxc3_s.o _divtc3_s.o _bswapsi2_s.o _bswapdi2_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 _udivdi3_s.o _umoddi3_s.o > _udiv_w_sdiv_s.o _udivmoddi4_s.o gthr-win32_s.o addtf3_s.o divtf3_s.o > eqtf2_s.o getf2_s.o letf2_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 > extendsftf2_s.o extenddftf2_s.o extendxftf2_s.o trunctfsf2_s.o > trunctfdf2_s.o trunctfxf2_s.o tf-signs_s.o unwind-dw2_s.o > unwind-dw2-fde_s.o unwind-sjlj_s.o gthr-gnat_s.o unwind-c_s.o > emutls_s.o -lmingw32 -lmingwex -lmoldname -lmsvcrt -luser32 -lkernel32 > -ladvapi32 -lshell32&& if [ -f 32/shlib/libgcc_s_sjlj-1.dll ]; then > mv -f 32/shlib/libgcc_s_sjlj-1.dll > 32/shlib/libgcc_s_sjlj-1.dll.backup; else true; fi&& mv > 32/shlib/libgcc_s_sjlj-1.dll.tmp 32/shlib/libgcc_s_sjlj-1.dll&& mv > 32/shlib/libgcc_s.a.tmp 32/shlib/libgcc_s.a > > the error is (and more of those) > /blue/meilerlab/apps/Linux2/x86_64/mingw-w64/2010.09.07/x86_64-w64-mingw32/bin/ld: > skipping incompatible > /blue/meilerlab/apps/Linux2/x86_64/mingw-w64/2010.09.07/x86_64-w64-mingw32/lib/libmingw32.a > when searching for -lmingw32 > > They are only warnings, but ultimately, the error is: > /blue/meilerlab/apps/Linux2/x86_64/mingw-w64/2010.09.07/x86_64-w64-mingw32/bin/ld: > cannot find -lmingw32 > > the same for: > -lmingwex, -lmoldname, -lmsvcrt, -luser32, -lkernel32, -ladvapi32, -lshell32 > This does not occur for me. Perhaps you want to try --with-build-sysroot. > The problem is, xgcc does not know about the lib32 mypath - when calling > /blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/./gcc/xgcc > -m32 --print-search-dirs > > this is the output > libraries: > =/blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/gcc/../lib/gcc/x86_64-w64-mingw32/4.5.1/32/:/blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/gcc/../lib/gcc/32/:/blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/gcc/../lib/gcc/x86_64-w64-mingw32/4.5.1/../../../../x86_64-w64-mingw32/lib/x86_64-w64-mingw32/4.5.1/32/:/blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/gcc/../lib/gcc/x86_64-w64-mingw32/4.5.1/../../../../x86_64-w64-mingw32/lib/../lib32/:/blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/gcc/..//mingw/lib/x86_64-w64-mingw32/4.5.1/32/:/blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/gcc/..//mingw/lib/../lib32/:/blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/gcc/../lib/gcc/x86_64-w64-mingw32/4.5.1/:/blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/g cc-4.5.1/gcc/../lib/gcc/:/blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/gcc/../lib/gcc/x86_64-w64-mingw32/4.5.1/../../../../x86_64-w64-mingw32/lib/x86_64-w64-mingw32/4.5.1/:/blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/gcc/../lib/gcc/x86_64-w64-mingw32/4.5.1/../../../../x86_64-w64-mingw32/lib/:/blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/gcc/..//mingw/lib/x86_64-w64-mingw32/4.5.1/:/blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/gcc/..//mingw/lib/ > > it only list the builddir subfolders of: > /blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/ > but my sysroot and prefix are both: > /blue/meilerlab/apps/Linux2/x86_64/mingw-w64/2010.09.07/ > and that is where everything is installed > Thats because uninstalled gcc works by searching directory by relative paths. > basically, I needed a link to the > /blue/meilerlab/apps/Linux2/x86_64/mingw-w64/2010.09.07/x86_64-w64-mingw32 > in my build directory: > /blue/meilerlab/apps/Linux2/src/mingw-w64/build/x86_64-w64-mingw32/gcc-4.5.1/ > called mingw - now the stage one xgcc knows where to find the > libraries > ln -s /mypath/x86_64-w64-mingw32 ./mingw > Try --with-build-sysroot. > After make install, the last thing I did was, to make symlinks in > sysroot or prefix in > x86_64-w64-mingw32/lib32/ > to lib/gcc/x86_64-w64-mingw32/lib32/libgcc_s.a > and > x86_64-w64-mingw32/lib64/ > to lib/gcc/x86_64-w64-mingw32/lib64/libgcc_s.a > > because yet again, this library path is not a default search path. > > I also tried Pete's solution first, and the compiling worked, but the > 32 libs were not created > http://pete-tech.blogspot.com/2010/07/compiling-mingw-w64-with-multilib-on.html > > Let me know if I can help with more details. > My final suggestion is to change the howto from > > 230 Step 3) GCC requires the x86_64-w64-mingw32 directory be mirrored as a > 231 directory 'mingw' in the same root. So, if using configure default > 232 /usr/local, type: > 233 ln -s /usr/local/x86_64-w64-mingw32 /usr/local/mingw > 234 or, for sysroot, type: > 235 ln -s /mypath/x86_64-w64-mingw32 /mypath/mingw > > to > > 230 Step 3) GCC requires the x86_64-w64-mingw32 directory be mirrored as a > 231 directory 'mingw' in the same root and in the build folder. So, > if using configure default > 232 /usr/local, type: > 233 ln -s /usr/local/x86_64-w64-mingw32 /usr/local/mingw > 233a ln -s /usr/local/x86_64-w64-mingw32 ./mingw > 234 or, for sysroot, type: > 235 ln -s /mypath/x86_64-w64-mingw32 /mypath/mingw > 235a ln -s /mypath/x86_64-w64-mingw32 ./mingw I tried a recent 4.6 gcc build, I didn't need to do this. ------------------------------------------------------------------------------ This SF.net Dev2Dev email is sponsored by: Show off your parallel programming skills. Enter the Intel(R) Threading Challenge 2010. http://p.sf.net/sfu/intel-thread-sfd _______________________________________________ Mingw-w64-public mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
