From: Luke D. <cod...@ho...> - 2003-07-01 11:38:22
|
Using this command: > g++ -o mingw-test.exe -L. -lmingwsock Main.o # no -lws2_32 here! I'm surprised that the program links and runs at all, because you are supposed to put -lmingwsock (and all other libraries) after your object files (Main.o). Are you sure that Main.o references something in libmingwsock? Luke ----- Original Message ----- From: Guilherme Balena Versiani To: Luke Dunstan Cc: min...@li... Sent: Thursday, June 26, 2003 10:51 PM Subject: Re: [Mingw-users] Binaries size / GNU STL Evil? This is the result of 'objdump -p libmingwsock.dll': ---8<---------------------------------------------------------- There is an import table in .idata at 0x6257c000 (...cut...) DLL Name: KERNEL32.dll (...cut...) DLL Name: msvcrt.dll (...cut...) DLL Name: WS2_32.DLL vma: Hint/Ord Member-Name Bound-To 3c5d0 61 WSASocketA 3c5e0 78 closesocket ---8<---------------------------------------------------------- Yes, the WSASocket and closesocket are in import table as expected. And here is the export table: ---8<---------------------------------------------------------- The Export Tables (interpreted .edata section contents) (...cut...) [Ordinal/Name Pointer] Table [ 0] _ZN4sock8MySocket11_handleListE [ 1] _ZN4sock8MySocket6_indexE [ 2] _ZN4sock8MySocketC1Ev [ 3] _ZN4sock8MySocketC2Ev [ 4] _ZN4sock8MySocketD0Ev [ 5] _ZN4sock8MySocketD1Ev [ 6] _ZN4sock8MySocketD2Ev [ 7] _ZTVN4sock8MySocketE ---8<---------------------------------------------------------- And no, there is no WSASocket nor closesocket in the exports table. I'm confused. When I compile the final executable with the following commands: ---8<---------------------------------------------------------- g++ -c -o Main.o Main.cpp g++ -o mingw-test.exe -L. -lmingwsock Main.o # no -lws2_32 here! ---8<---------------------------------------------------------- There are no libws2_32.a dependencies! When I do the same in MSVC I must include the ws2_32.lib in my final executable project even I don't use the WSASocket() or closesocket() functions directly!... Is this a normal MinGW/gcc behavior? Or are there anything I couldn't see? Here is the Main.cpp source: ---8<---------------------------------------------------------- #include <MingwSock.h> using namespace sock; int main() { MySocket sock; return 0; } ---8<---------------------------------------------------------- (...) A cleaner way would be to get the GCC source, split functexcept.cc into two or more separate files, then rebuild libstdc++ (which probably requires building GCC too). That way, you could even submit a patch to the libstdc++ project (see gcc.gnu.org) to have this change incorporated into a future version of the library. Interesting, maybe I make this when I have enough time (and if somebody doesn't fix it until there). On the other hand, most people don't think this is at all evil, so you might choose to ignore the slightly larger executables. Well, I can't ignore the slightly larger executables... In program I'm developing, size is crucial. Therefore, I just can't use MinGW (nor Cygwin) until libstdc++.a changes... That's a bad thing: the MSVC is not cheap! Regards, -- Guilherme Balena Versiani mailto:gu...@co... |