From: Wu Y. <ad...@ne...> - 2004-05-17 03:05:14
|
Aaron W. LaFramboise wrote: > kng wrote: > >> Error Starting Program >> >> The HELLO.EXE file is linked to missing export >> KERNEL32.DLL:InterlockedCompareExchange. >> >> > > Well, Windows 95 does not have InterlockedCompareExchange, which > apparently is being used by libstdc++-v3 for synchronization. Unless > MinGW has de-supported Windows 95, this would probably be a bug. OK, I think I must speak, since I am the one who submitted a patch that breaks MinGW on Windows 95. The purpose is to use a customized mutex implementation to accelerate thread-locking operation by a ratio of about 60. The libstdc++ interface requires a __gthr_mutex_trylock, so we cannot simply use critical sections, where TryEnterCriticalSection is only provided on NT series of Windows. InterlockedCompareExchange is used in the current implementation, which requires Windows 98 or later. I knew this, but I did not expect complaints since Windows 95 is even not supported by Microsoft, and I supposed that anyone who still uses Windows 95 should be satisfied with the faster and less bulky GCC 2.95.3. I personally still uses MinGW GCC 2.95.3-8 more often than GCC 3.x, on an old Windows 2000 box manufactured three years ago. Even Windows 95 OSR2 is seven years old. > I'm curious: Is there some reason to use InterlockedCompareExchange > instead of the CPU's atomicity.h? I checked the GCC source and did not find an implementation of InterlockedCompareExchange. InterlockedExchange could not be used since the semantics are not correct. The developer list is currently discussing about solutions. Best regards, Wu Yongwei |
From: Wu Y. <ad...@ne...> - 2004-05-18 01:47:31
|
Aaron W. LaFramboise wrote: >> I checked the GCC source and did not find an implementation of >> InterlockedCompareExchange. InterlockedExchange could not be used >> since the semantics are not correct. > > > I'm assuming you're replying to my remarks at > http://article.gmane.org/gmane.comp.gnu.mingw.devel/948 > > If you have the time, I would appreciate it if you could show me why > my suggested short implementation is semantically inappropriate. > I've reexamined it, and checked some Internet references, and I can't > figure out the problem with it. See a similar implementation using > InterlockedExchange, the lightweight mutexes used for shared_ptr in > Boost: http://www.boost.org/boost/detail/lwm_win32.hpp > > Speaking of Boost, a recent Windows multithreading-related post to > the Boost mailing list may be of interest to some: > http://lists.boost.org/MailArchives/boost/msg64626.php > > Thank you for your time, > > Aaron W. LaFramboise I might err, but I think the scenario is as follows: Assuming the mutex is locked by one thread, AND another waiting for the lock, i.e., mutex->counter == 2, then, __gthr_mutex_trylock in a third thread should return 1 indicating failure and not change the mutex in any way. InterlockedCompareExchange just does this. However, your version will have the side effect of setting counter to 1. Best regards, Yongwei |
From: Jerry R. <jerry@ChirpingBat.Com> - 2004-05-18 16:46:58
|
I've downloaded gcc-g++-3.3.3-20040217-1.tar.gz from www.mingw.org. After unzipping and unarchieving it I end up with g++.exe and some other executibles in c:\temp\gcc-g++-3.3.3-20040217-1.tar\gcc-g++-3.3.3-20040217-1\bin\g++.exe. I've included this path in Windows. I can't get a exe file out of a cpp file. Aren't I supposed to be able to go to a DOS prompt and type: g++ myfile.cpp I've also tried: g++ -c myfile.cpp g++ -o myfile myfile.o Nothing seems to work. Do you have any idea what I'm doing wrong? Thanks. Jerry |
From: Earnie B. <ea...@us...> - 2004-05-18 17:32:07
|
You missing the gcc-core-3.3.3, mingw-runtime and w32api packages. Earnie Jerry Richer wrote: > I've downloaded gcc-g++-3.3.3-20040217-1.tar.gz from www.mingw.org. >After unzipping and unarchieving it I end up with g++.exe and some other >executibles in >c:\temp\gcc-g++-3.3.3-20040217-1.tar\gcc-g++-3.3.3-20040217-1\bin\g++.exe. >I've included this path in Windows. I can't get a exe file out of a cpp >file. Aren't I supposed to be able to go to a DOS prompt and type: > >g++ myfile.cpp > > I've also tried: > >g++ -c myfile.cpp >g++ -o myfile myfile.o > > Nothing seems to work. Do you have any idea what I'm doing wrong? > Thanks. > > Jerry > > > > >------------------------------------------------------- >This SF.Net email is sponsored by: SourceForge.net Broadband >Sign-up now for SourceForge Broadband and get the fastest >6.0/768 connection for only $19.95/mo for the first 3 months! >http://ads.osdn.com/?ad_id=2562&alloc_id=6184&op=click >_______________________________________________ >MinGW-users mailing list >Min...@li... > >You may change your MinGW Account Options or unsubscribe at: >https://lists.sourceforge.net/lists/listinfo/mingw-users > > > > > -- http://www.mingw.org http://sourceforge.net/projects/mingw https://sourceforge.net/donate/index.php?user_id=15438 |
From: Luke D. <cod...@ho...> - 2004-05-19 01:13:50
|
And binutils. These all need to be extracted into the same directory, and if you still have problems then describe the error messages. Luke ----- Original Message ----- From: "Earnie Boyd" <ea...@us...> To: <min...@li...> Sent: Wednesday, May 19, 2004 1:31 AM Subject: Re: [Mingw-users] Can't get an exe file from a cpp file using g++! > You missing the gcc-core-3.3.3, mingw-runtime and w32api packages. > > Earnie > > Jerry Richer wrote: > > > I've downloaded gcc-g++-3.3.3-20040217-1.tar.gz from www.mingw.org. > >After unzipping and unarchieving it I end up with g++.exe and some other > >executibles in > >c:\temp\gcc-g++-3.3.3-20040217-1.tar\gcc-g++-3.3.3-20040217-1\bin\g++.exe. > >I've included this path in Windows. I can't get a exe file out of a cpp > >file. Aren't I supposed to be able to go to a DOS prompt and type: > > > >g++ myfile.cpp > > > > I've also tried: > > > >g++ -c myfile.cpp > >g++ -o myfile myfile.o > > > > Nothing seems to work. Do you have any idea what I'm doing wrong? > > Thanks. > > > > Jerry |
From: Jerry R. <jerry@ChirpingBat.Com> - 2004-05-19 18:31:34
|
Thanks for the help but I'm not getting it. OK I'm trying a different tact. I've downloaded MinGW-3.1.0-1.exe and installed it. It comes with an nice Installation routine. I've added c:\MinGW\bin; to my Path through Control Panel, System, Advanced. I press windows-r for the Run dialogue, type "g++ c:\myprogram.cpp", tap enter. The computer hangs for a few seconds then either returns me to the Window I was in when I brought up the Run dialogue or spews out a long list of errors. I can never find any sort of exe or a.out file. Am I doing this right? Is the following a valid C++ program? #include <io.h> void main() { cout << "Hello World"; } Thanks. Jerry |
From: Tim S. <ti...@we...> - 2004-05-19 19:56:27
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi Jerry, you wrote: | Thanks for the help but I'm not getting it. OK I'm trying a different | tact. I've downloaded MinGW-3.1.0-1.exe and installed it. It comes with an | nice Installation routine. I've added c:\MinGW\bin; to my Path through | Control Panel, System, Advanced. I press windows-r for the Run dialogue, | type "g++ c:\myprogram.cpp", tap enter. you should not directly call g++, instead open a console window with cmd and then run 'g++ -o myprogram.exe myprogram.cpp'. So you will see the error messages of your program | Is the following a valid C++ program? No, it isn't. | #include <io.h> Should be #include <iostream>. Note that all standard c++ headers don't have a suffix. | void main() main() should return int. | cout << "Hello World"; This is also partial wrong since there isn't an object called 'cout' in the root namespace. All standard c++ objects and classes reside in the std namespace so you have to put a std:: before your cout or write somewhere above 'using namespace std;'. You should also add a return value at the end. So a hello world program should look like this: - ----------------------- #include <iostream> using namespace std; int main() { cout << "Hello world!" << endl; return 0; } - ----------------------- HTH so long Tim - -- http://we-are-teh-b.org/~tim/borg.key -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (MingW32) Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org iD8DBQFAq7tfsMXChvH2qP0RAqA8AKCV9dyNqPcT2D4341hXFhwAT4ezQACZAZtG U6udaz8jcteeBVwZiWkFoFc= =R96R -----END PGP SIGNATURE----- |
From: Aaron W. L. <aar...@aa...> - 2004-05-17 06:25:17
|
Wu Yongwei wrote: > > I checked the GCC source and did not find an implementation of > InterlockedCompareExchange. InterlockedExchange could not be used since > the semantics are not correct. I'm assuming you're replying to my remarks at http://article.gmane.org/gmane.comp.gnu.mingw.devel/948 If you have the time, I would appreciate it if you could show me why my suggested short implementation is semantically inappropriate. I've reexamined it, and checked some Internet references, and I can't figure out the problem with it. See a similar implementation using InterlockedExchange, the lightweight mutexes used for shared_ptr in Boost: http://www.boost.org/boost/detail/lwm_win32.hpp Speaking of Boost, a recent Windows multithreading-related post to the Boost mailing list may be of interest to some: http://lists.boost.org/MailArchives/boost/msg64626.php Thank you for your time, Aaron W. LaFramboise |