Thread overview
Link against MinGW libraries
Aug 22, 2012
Kai Meyer
Aug 22, 2012
Maxim Fomin
Aug 23, 2012
Mike Parker
Aug 24, 2012
Kagamin
Aug 24, 2012
Kagamin
August 22, 2012
There's got to be a way to link against libraries generated by MinGW, right? I'm using CMake to create a very simple 1 method library. If I tell D to link against the .lib (simple ar archive), it complains that it's an invalid library. If I tell D to link against the .dll, it complains that there is no .lib.

I seem to remember thinking that Microsoft tools create a .dll and a .lib for development libraries, and you link against the .lib but run against the .dll. I don't know how to make MinGW (or cmake for that matter) generate both the .dll and .lib. I seem to remember that other projects I've built with the Visual Studio compiler, I get .lib and .dll files for my shared libraries, and those seem to work.

Any help would be appreciated.
August 22, 2012
On Wednesday, 22 August 2012 at 14:56:40 UTC, Kai Meyer wrote:
> There's got to be a way to link against libraries generated by MinGW, right? I'm using CMake to create a very simple 1 method library. If I tell D to link against the .lib (simple ar archive), it complains that it's an invalid library. If I tell D to link against the .dll, it complains that there is no .lib.
>
> I seem to remember thinking that Microsoft tools create a .dll and a .lib for development libraries, and you link against the .lib but run against the .dll. I don't know how to make MinGW (or cmake for that matter) generate both the .dll and .lib. I seem to remember that other projects I've built with the Visual Studio compiler, I get .lib and .dll files for my shared libraries, and those seem to work.
>
> Any help would be appreciated.

Which D compiler are you using?
August 23, 2012
On 8/22/2012 11:56 PM, Kai Meyer wrote:
> There's got to be a way to link against libraries generated by MinGW,
> right? I'm using CMake to create a very simple 1 method library. If I
> tell D to link against the .lib (simple ar archive), it complains that
> it's an invalid library. If I tell D to link against the .dll, it
> complains that there is no .lib.
>
> I seem to remember thinking that Microsoft tools create a .dll and a
> .lib for development libraries, and you link against the .lib but run
> against the .dll. I don't know how to make MinGW (or cmake for that
> matter) generate both the .dll and .lib. I seem to remember that other
> projects I've built with the Visual Studio compiler, I get .lib and .dll
> files for my shared libraries, and those seem to work.
>
> Any help would be appreciated.

The issue is the object file format that the MinGW toolchain uses. It's different from that used by the DMD linker (assuming you are using DMD). What you should do here is download the basic utilities package from the Digital Mars site [1] and use the implib tool on your DLL. This will create a link library in a format the DMD linker understands. Link with it and you should be able to use your DLL.

[1] http://www.digitalmars.com/download/freecompiler.html
August 24, 2012
If I remember it correctly, you should write a .def file and compile it with dlltool or something like that. It will create the import library.
August 24, 2012
There was also a switch for gcc or ld to generate an import library.