Win32 + OpenGL bindings

Jacob Carlborg doob at me.com
Mon Apr 22 03:01:54 PDT 2013


On 2013-04-21 17:20, Diggory wrote:
> OK, thanks I think I've got the hang of the way linking works now - I
> was confused about how some things didn't seem to require libs to work,
> but now I see it's because those things were compiled into
> "druntime.lib" which was compiled into "phobos.lib".
>
> So is this correct, assuming I'm only talking about non-COFF libs:
> - D code can link directly to normal C libs

Yes.

> - .libs generated by DMD are a superset of normal C .libs, they can
> contain normal C functions but DMD also has some way of representing
> more complicated D constructs inside the .lib file (but not templates).

Yes and no. DMD produces the same .lib files as any C compiler does. The 
differences is that D functions uses mangled names this is to support 
overloaded function (two or more functions with the same name but 
different argument types), methods and template functions.

> - druntime.lib is linked into phobos.lib so only phobos.lib needs to be
> linked and the compiler does this automatically (how does this work, is
> just hard-coded in?)

Yes, druntime is included in Phobos. The compiler hard codes this (at 
least on Posix), add the -v flag when compiling and look at the end of 
the output to see the linker command it uses. There's also the dm.ini 
(dmd.conf on Posix) that contains a couple of default flags. You'll see 
that it adds the search path where Phobos is located.

> Is there a compiler independent way to tell the linker to automatically
> link in a specific library from within a .d file? (preferable this hint
> should still exist in the .di file generated from that .d file, and be
> transitive so dependencies automatically get linked in just by
> "import"ing the required stuff) If not can I suggest this as a feature?

Yes, pragma(lib, ...); but it won't work for .di files.

http://d.puremagic.com/issues/show_bug.cgi?id=2776

> I've switched to using the "head" revision in the repo and building from
> source which was surprisingly easy (thanks whoever set that up!) so now
> I can just add missing functions to windows.d as I need and rebuild and
> no more linker errors!
>
> Am I correct in thinking there is no specific order in the contents of
> windows.d? I've rearranged mine so that functions are ordered by module
> then header file so I can more easily see if a function already exists,
> and if not where to add it. Would these changes be of any use?

In general declarations are order independent. When you start with 
nested functions and static-ifs it become order dependent.

-- 
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list