From: Torsten M. <tmohr@s.netic.de> - 2007-07-15 06:54:25
|
Hi, i try to generate a static library using MinGW that is meant to be used on MS Windows and compiled against some other objects that were created with MS VC. I create my library on MSYS / MinGW using ld: ld -r -o static.lib $(OBJECTS) The objects were created with MinGW (gcc). The library i created has some undefined references that seem to point into libc, for example: ___divdi3 ___popcountsi3 ___umoddi3 ___udivdi3 __alloca _snprintf How do i need to create the (static) library so it can be used in a MS VisualC environment? I tried to add "-lc" but it seems to me that i need a statically compiled libc for MinGW, is that correct? The man-page of ld says that i need to add "-lc", but on my MSYS/MinGW i can't find a "libc.*" at all. What is wrong here? Thanks for any hints, Torsten. |
From: Brian D. <br...@de...> - 2007-07-15 07:13:51
|
Torsten Mohr wrote: > I create my library on MSYS / MinGW using ld: > > ld -r -o static.lib $(OBJECTS) This does not create a library, it creates a partially linked .o file. If you want a static library, use "ar" just like you would on *nix. You can call the output .a or .lib, they are the same format. The library created with ar should work just fine with both gcc and MSVC, as long as everything was built with compatible options (i.e. same version of the runtime, single/multi-threaded, no C++ interfaces, etc.) Partial linking should also work, but you can't call the output a .lib when it's still just an .o file. > I tried to add "-lc" but it seems to me that i need a statically > compiled libc for MinGW, is that correct? > > The man-page of ld says that i need to add "-lc", but on my MSYS/MinGW > i can't find a "libc.*" at all. None of this applies to MinGW. There is no "libc" here, and invoking "ld" directly is almost always a mistake. There is -lmsvcrt which is roughly the equivalent, but there is no static version of this library, at least not unless you are using Microsoft's commercial product. But you don't need a static version of the C runtime to create a simple static library. Brian |
From: Brian D. <br...@de...> - 2007-07-15 07:26:02
|
Torsten Mohr wrote: > ___divdi3 > ___popcountsi3 > ___umoddi3 > ___udivdi3 I forgot to mention that these all come from libgcc which is part of the compiler. It is automatically added when you let the compiler invoke the linker, which is the sort of reason why invoking "ld" directly is usually a bad idea. However, if you're linking using MS's LINK.EXE you will probably have to specify libgcc.a explicitly if your library requires these symbols. Brian |