www.digitalmars.com         C & C++   DMDScript  

D.gnu - Linking to C library [gdc/mac]

reply Graham MacDonald <grahamamacdonalad gmail.com> writes:
Apologies if this has been asked previously - I'm new to D and haven't 
seen the info anywhere.

I want to use a C library (glfw, probably others) from within my D code. 
  I want to link using gdc.  How can I do this?  Am I right in thinking 
I would have to create a D module (as described for dmd in 
http://www.digitalmars.com/d/htomodule.html)?

Thanks!

Graham
Jan 06 2007
next sibling parent Johan Granberg <lijat.meREM OVE.gmail.com> writes:
Graham MacDonald wrote:

 Apologies if this has been asked previously - I'm new to D and haven't
 seen the info anywhere.
 
 I want to use a C library (glfw, probably others) from within my D code.
   I want to link using gdc.  How can I do this?  Am I right in thinking
 I would have to create a D module (as described for dmd in
 http://www.digitalmars.com/d/htomodule.html)?
 
 Thanks!
 
 Graham

Firstly glfw has d bindings already created in the standard distribution. Secondly you can call any c function by declaring it for example "extern(C)int write(char*);". If you intend to use only a small subset of a library this is simpler than creating an entier d module. (a d module for linking with c is just some extern(c) declarations of structs and functions and some glue code to handle defines)
Jan 06 2007
prev sibling next sibling parent Bradley Smith <digitalmars-com baysmith.com> writes:
In addition to the d bindings mentioned previously, GLD is a D language 
port of the GLFW library. It can be obtained from 
http://dsource.org/projects/schooner. However, it has not been tested 
with gdc, only with the DMD compiler on Linux and Windows. It should 
work with gdc, but the build has not been configured for it yet.

   Bradley


Graham MacDonald wrote:
 Apologies if this has been asked previously - I'm new to D and haven't 
 seen the info anywhere.
 
 I want to use a C library (glfw, probably others) from within my D code. 
  I want to link using gdc.  How can I do this?  Am I right in thinking I 
 would have to create a D module (as described for dmd in 
 http://www.digitalmars.com/d/htomodule.html)?
 
 Thanks!
 
 Graham

Jan 06 2007
prev sibling next sibling parent Graham MacDonald <grahamamacdonalad gmail.com> writes:
Thanks guys - I took the code in the glfw package and made some minor 
changes to get it building on mac and it works a treat now.

g
Jan 07 2007
prev sibling next sibling parent reply Graham MacDonald <grahamamacdonalad gmail.com> writes:
I got glfw to link with my app, but I am having different problems with 
freetype.  I'm trying to statically link the latest version of freetype 
to my app.  I have some bindings I took from the derelict freetype 
binding, but have removed the dynamic linking/derelict library code.

The problem I'm having is that when I finally link my obj files, 
libraries & frameworks, I get an undefined symbol:
   __D8freetype2ft12__ModuleInfoZ

Can someone explain what I'm missing here?  I've linked with:
   gdc obj/*.o -g -o game -lglfw -lfreetype -framework Carbon -framework 
OpenGL -framework AGL

Seems ok to me, but I'm sure I've missed something.

Thanks in advance

Graham
Jan 13 2007
parent reply Johan Granberg <lijat.meREM OVE.gmail.com> writes:
Graham MacDonald wrote:

 I got glfw to link with my app, but I am having different problems with
 freetype.  I'm trying to statically link the latest version of freetype
 to my app.  I have some bindings I took from the derelict freetype
 binding, but have removed the dynamic linking/derelict library code.
 
 The problem I'm having is that when I finally link my obj files,
 libraries & frameworks, I get an undefined symbol:
    __D8freetype2ft12__ModuleInfoZ
 
 Can someone explain what I'm missing here?  I've linked with:
    gdc obj/*.o -g -o game -lglfw -lfreetype -framework Carbon -framework
 OpenGL -framework AGL
 
 Seems ok to me, but I'm sure I've missed something.
 
 Thanks in advance
 
 Graham

Have you compiled the freetype binding and linked the resulting .o file in your app?
Jan 13 2007
parent Graham MacDonald <grahamamacdonalad gmail.com> writes:
Johan Granberg wrote:
 Graham MacDonald wrote:
 
 I got glfw to link with my app, but I am having different problems with
 freetype.  I'm trying to statically link the latest version of freetype
 to my app.  I have some bindings I took from the derelict freetype
 binding, but have removed the dynamic linking/derelict library code.

 The problem I'm having is that when I finally link my obj files,
 libraries & frameworks, I get an undefined symbol:
    __D8freetype2ft12__ModuleInfoZ

 Can someone explain what I'm missing here?  I've linked with:
    gdc obj/*.o -g -o game -lglfw -lfreetype -framework Carbon -framework
 OpenGL -framework AGL

 Seems ok to me, but I'm sure I've missed something.

 Thanks in advance

 Graham

Have you compiled the freetype binding and linked the resulting .o file in your app?

.....that's the one! I didn't realise I have to compile the binding since I was importing it. Thanks! graham
Jan 13 2007
prev sibling parent John Reimer <terminal.node gmail.com> writes:
On Sat, 13 Jan 2007 16:59:19 +0000, Graham MacDonald wrote:

 Johan Granberg wrote:
 Graham MacDonald wrote:
 
 I got glfw to link with my app, but I am having different problems with
 freetype.  I'm trying to statically link the latest version of freetype
 to my app.  I have some bindings I took from the derelict freetype
 binding, but have removed the dynamic linking/derelict library code.

 The problem I'm having is that when I finally link my obj files,
 libraries & frameworks, I get an undefined symbol:
    __D8freetype2ft12__ModuleInfoZ

 Can someone explain what I'm missing here?  I've linked with:
    gdc obj/*.o -g -o game -lglfw -lfreetype -framework Carbon -framework
 OpenGL -framework AGL

 Seems ok to me, but I'm sure I've missed something.

 Thanks in advance

 Graham

Have you compiled the freetype binding and linked the resulting .o file in your app?

.....that's the one! I didn't realise I have to compile the binding since I was importing it. Thanks! graham

You have to link these symbols in because they will be assigned pointers to the freetype functions at runtime (from the shared library). If the the static import modules were used, meaning you are linking with a static lib, then you wouldn't have to link in the module. -JJR
Jan 13 2007