From: Mark F. <ma...@ya...> - 2007-01-22 22:29:36
|
Hello- i'm trying to build the mingw-runtime 3.11 with gcc version 4.1.2 20070108 (prerelease) on linux but i'm stuck after 2 days of trying. i get an error message (see below). well, this is what i've done so far: 1. Set some initial Environment variables =============== bash# export TARGET=i686-mingw32 bash# export PREFIX=/opt/mingw 2. Binutils =============== bash# tar -xvzf binutils-2.17.50-20060824-1-src.tar.gz bash# cd binutils-2.17.50-20060824-1-src bash# ./configure --target=$TARGET --prefix=$PREFIX --with-gcc --with-gnu-as --with-gnu-ld --disable-nls --disable-debug bash# make bash# make install 3. Headers ================ bash# tar -xvzf mingw-runtime-3.11-20061202-1-src.tar.gz bash# tar -xvzf w32api-3.8-src.tar bash# cp mingw-runtime-3.11/include w32api-3.8/include $PREFIX/include -r 4. Add the binutils path to PATH ================ bash# export PATH=$PREFIX/bin:$PATH 5. Build gcc ================ bash# tar -xvjf gcc-core-4.1-20070108.tar.bz2 bash# tar -xvjf gcc-g++-4.1-20070108.tar.bz2 bash# cd gcc-4.1-20070108 bash# patch -p0 -b -u <GCC-v4.1-r120280-CreateFileMapping-Vista.patch (gcc bug#27067) bash# patch -p0 -b -u <GCC-v4.1-r120280-virtual-stdcall.patch (gcc bug#30335) bash# ./configure --target=$TARGET --prefix=$PREFIX --with-headers=$PREFIX/$TARGET/include --with-gcc --with-gnu-as --with-gnu-ld --disable-nls --disable-debug --enable-threads=win32 --disable-win32-registry --enable-sjlj-exceptions --enable-languages=c --disable-libssp bash# make bash# make install 6. Build win32api ================ bash# cd w32api-3.8 bash# ./configure --host=$TARGET --target=$TARGET --prefix=$PREFIX --with-headers=$PREFIX/$TARGET/include bash# make bash# make install 7. mingw-runtime ================ bash# cd mingw-runtime-3.11 bash# ./configure --host=$TARGET --target=$TARGET --prefix=$PREFIX --with-headers=$PREFIX/$TARGET/include bash# make at this point i get the following error: Making in profile... make[1]: Entering directory `/root/packages/mingw-3.4.5/BUILD/mingw-runtime-3.11/profile' make[1]: Nothing to be done for `all'. make[1]: Leaving directory `/root/packages/mingw-3.4.5/BUILD/mingw-runtime-3.11/profile' Making in mingwex... make[1]: Entering directory `/root/packages/mingw-3.4.5/BUILD/mingw-runtime-3.11/mingwex' make[1]: Nothing to be done for `all'. make[1]: Leaving directory `/root/packages/mingw-3.4.5/BUILD/mingw-runtime-3.11/mingwex' i686-mingw32-dlltool --as i686-mingw32-as --dllname mingwm10.dll \ --def mingwthrd.def --output-lib libmingwthrd.a i686-mingw32-ar rv libmingwthrd.a crtmt.o a - crtmt.o i686-mingw32-ranlib libmingwthrd.a i686-mingw32-dlltool --as i686-mingw32-as --output-def mingwthrd.def mthr.o mthr_init.o i686-mingw32-gcc -Wl,--base-file=mingwthrd.base -B./ -mdll -Wl,--image-base,0x6FBC0000 -Wl,--entry,_DllMainCRTStartup@12 mthr.o mthr_init.o -Lmingwex \ -o mingwthrd_dummy.exe /opt/mingw/lib/gcc/i686-mingw32/4.1.2/../../../../i686-mingw32/bin/ld: cannot find -luser32 collect2: ld returned 1 exit status make: *** [mingwm10.dll] Error 1 i've tried everything i can possibly think of and i'm really stuck. i need a gcc4.1.2 cross compiler so that i can build ReactOS on linux. any help would be GREATLY appreciated.. mark. :-) ____________________________________________________________________________________ Looking for earth-friendly autos? Browse Top Cars by "Green Rating" at Yahoo! Autos' Green Center. http://autos.yahoo.com/green_center/ |
From: Brian D. <br...@de...> - 2007-01-22 23:03:02
|
Mark Fonnemann wrote: > i'm trying to build the mingw-runtime 3.11 with gcc version 4.1.2 20070108 > (prerelease) on linux but i'm stuck after 2 days of trying. i get an error > message (see below). well, this is what i've done so far: You know there are existing cross-compiler scripts that you could modify to use gcc 4, rather than reinventing the wheel... check the wiki. Also consider that you don't actually have to build w32api and mingw-runtime, you can just download and unpack the binary packages into $PREFIX. You're already doing this with the headers so you might as well do it with import libraries and crt objects too. Although note that lifting headers directly out of the -src package is not the greatest idea in the world. Instead take them from the binary package, which is what you'd get if you just installed the native toolchain. In this case it probably doesn't matter, however occasionally you will find some packages that have generated/modified headers that get installed so just copying include/ from the source tarball is a very bad habit to get into. > 6. Build win32api > ================ > bash# cd w32api-3.8 > bash# ./configure --host=$TARGET --target=$TARGET --prefix=$PREFIX > --with-headers=$PREFIX/$TARGET/include > bash# make > bash# make install So after this step do you have $PREFIX/lib/libuser32.a (and all the other w32api import libraries)? (Also note that supplying --target here to the configuration of a library is meaningless. 'target' only applies to compilers/assemblers/linkers or programs that themselves output code. Although supplying it here should be benign.) > i686-mingw32-gcc -Wl,--base-file=mingwthrd.base -B./ -mdll > -Wl,--image-base,0x6FBC0000 -Wl,--entry,_DllMainCRTStartup@12 mthr.o > mthr_init.o -Lmingwex \ > -o mingwthrd_dummy.exe > /opt/mingw/lib/gcc/i686-mingw32/4.1.2/../../../../i686-mingw32/bin/ld: cannot > find -luser32 > collect2: ld returned 1 exit status Here it seems your gcc is not searching in the right locations. You'll need to debug this to see where it's searching (e.g. using strace, and/or -v or -###). You might just need a symlink at $PREFIX/$TARGET/lib -> $PREFIX/lib. You might be able to work around this by adding the correct -L to LDFLAGS but that's a very poor crutch to rely on, as the cross-gcc should be able to find its libraries without any help. Brian |
From: Keith M. <kei...@to...> - 2007-01-23 15:09:32
|
Brian Dessent wrote: > Although note that lifting > headers directly out of the -src package is not the greatest idea in the > world. Instead take them from the binary package, which is what you'd > get if you just installed the native toolchain. Huh? If you use *our* -src package, then the headers are identical to those in the binary package. The `make bindist' target does no more with headers, than to faithfully replicate the `include' subtree from the source tree into the package tree. However, I'd have to agree with another comment Brian made. Why reinvent the wheel all over again? Just use: http://downloads.sourceforge.net/mingw/x86-mingw32-build.sh-0.0-20061107-1.tar.bz2 and adjust the package specs in x86-mingw32-build.sh.conf, to suit your requirements wrt alternative version numbers. And, for the record, this does build all the components from source, and does lift the runtime library headers from the -src packages; only those headers supplied with the GCC components, are altered during the build. Regards, Keith. |
From: Brian D. <br...@de...> - 2007-01-23 19:28:40
|
Keith MARSHALL wrote: > Huh? If you use *our* -src package, then the headers are identical to > those > in the binary package. The `make bindist' target does no more with > headers, > than to faithfully replicate the `include' subtree from the source tree > into > the package tree. You left out my next sentence, which was: > In this case it > probably doesn't matter, however occasionally you will find some > packages that have generated/modified headers that get installed so just > copying include/ from the source tarball is a very bad habit to get > into. I.e. it won't matter here, but it could matter in other packages so it's not a general purpose technique. Brian |
From: Rich <rm...@ya...> - 2007-02-14 19:53:03
|
I have a simple C function I've used on UNIX and Linux to test if a file or directory exists. On Windows, the function works for tests on a file, but a test for a folder always says it doesn't exist. /*********************************************** * Function: file_exist(ptr) * ptr = character pointer to a path string. * * Description: function to test if file exists. * returns 0 if file does exist, returns 1 if not ************************************************/ int file_exists(char *ptr) { FILE *fp1; /* file pointer */ /* test to see if file can be read */ if((fp1 = fopen(ptr,"r")) == NULL) { return(1); /* file does not exist */ } else { fclose(fp1); /* close the file */ return(0); /* file does exist */ } } /***********************************************/ So, my questions are; are Windows folders unlike files so this test is useless? am I testing with fopen incorrectly? must I find a Windows equivalent to fopen? (I ask this because I've never had to make calls to Windows functions before because I usually write simple command line utilities) My Google searches haven't turned up anything on this topic that I could find. Thanks for any assistance. Rich Simoes |
From: Mikko L. <ml...@cs...> - 2007-02-14 20:17:50
|
Hi, > I have a simple C function I've used on UNIX > and Linux to test if a file or directory exists. > On Windows, the function works for tests on a file, > but a test for a folder always says it doesn't exist. Did you already try dirent.h? #include <stdio.h> #include <dirent.h> int main( int argc, char **argv ) { DIR *dp = opendir("c:/mytestdir"); if( dp==NULL ) { printf("Nope...\n"); } else { printf("Oh yes!\n"); } return 0; } Regards, Mikko |
From: Rene S. <ren...@gm...> - 2007-02-14 20:23:40
|
Rich wrote: > So, my questions are; > > are Windows folders unlike files so this test is useless? > > am I testing with fopen incorrectly? > > must I find a Windows equivalent to fopen? (I ask this > because I've never had to make calls to Windows functions > before because I usually write simple command line utilities > You can call stat() to test if a file or a directory exists. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt__stat.2c_._wstat.2c_._stati64.2c_._wstati64.asp |
From: Keith M. <kei...@to...> - 2007-02-15 17:27:51
|
Rene Sugar wrote: > You can call stat() to test if a file or a directory exists. You can, but for the OP's needs, `access()' is a simpler choice: http://msdn.microsoft.com/library/en-us/vclib/html/_crt__access.2c_._waccess.asp Regards, Keith. |
From: Rich <rm...@ya...> - 2007-02-16 19:17:49
|
Rene Sugar wrote: > You can call stat() to test if a file or a directory exists. This worked great for my needs since it tests for a file or directory. It's also supported on Solaris, Linux and Win32, so I can use the same code for all platforms. Thanks. And thanks to Milko and Keith for their suggestions as well. Rich Simoes /************************************************** * Function: file_exist(ptr) * ptr = character pointer to a string. * * Description: test if file/directory exists. * returns 0 if exists, returns 1 if not **************************************************/ int file_exists(char *ptr) { struct stat buf; /* Check if file or directory exists */ if(( stat( ptr, &buf )) != 0) return(1); /* file does not exist */ else return(0); /* file does exist */ } |
From: Keith M. <kei...@us...> - 2007-02-14 22:38:21
|
On Wednesday 14 February 2007 19:53, Rich wrote: > I have a simple C function I've used on UNIX > and Linux to test if a file or directory exists... > [remaining content snipped] Huh? What has this to do with the original context of the message to which you replied, (which had the subject: `Re: [Mingw-users] problem building mingw-runtime 3.11 with gccversion4.1.2 20070108 (prerelease)')? When you want to introduce a new topic, please START A NEW THREAD. DO NOT simply reply to a message in an unrelated thread, with a changed subject line. Thanks, Keith. |
From: Keith M. <kei...@to...> - 2007-02-15 16:57:32
|
Rich wrote: > I have a simple C function I've used on UNIX > and Linux to test if a file or directory exists. > On Windows, the function works for tests on a file, > but a test for a folder always says it doesn't exist. > > /*********************************************** > * Function: file_exist(ptr) > * ptr = character pointer to a path string. > * > * Description: function to test if file exists. > * returns 0 if file does exist, returns 1 if not > ************************************************/ > int file_exists(char *ptr) > { > FILE *fp1; /* file pointer */ > > /* test to see if file can be read */ > if((fp1 = fopen(ptr,"r")) == NULL) { > return(1); /* file does not exist */ > [...] > > So, my questions are; > > are Windows folders unlike files so this test is useless? Yep. A folder, (or directory) is *not* a file; you cannot `fopen()' it, for any normal file access method. > am I testing with fopen incorrectly? You got it. You need to use some other function to test for your ability to access a directory; `access()' seems an obvious choice, (works for both directories and files): $ cat access.c #include <stdio.h> #include <io.h> int main( int argc, char **argv ) { while( --argc ) { char *p = *++argv; printf( "%s: %s\n", p, access( p, F_OK ) == 0 ? "Ok" : "No way!" ); } return 0; } $ gcc -o access access.c $ ./access . access.c nonsuch .: Ok access.c: Ok nonsuch: No way! HTH, Keith. |