Thread overview
Public imports with D interface files?
Sep 04, 2011
Sean Eskapp
Sep 04, 2011
David Nadlinger
Sep 04, 2011
Sean Eskapp
September 04, 2011
I'm compiling a very simple D interface file:

    module std_ext.typetuple;

    public import std.typetuple

    class TypeArray(T...)
    {
    }

Compiling it as such:
    dmd -debug -unittest -D -Dddocs -w -H -o- std_ext/typetuple.d

And including it as such:

    import std_ext.typetuple;

    void main()
    {
        TypeArray!(int, double) blah;
    }

I get a linker error "Symbol Undefined _D7std_ext9typetuple12__ModuleInfoZ"

Removing the public import removes this error. How can I fix this?
September 04, 2011
Are you specifying std_ext/typetuple.di or whatever it is called when compiling the main module? The public import probably triggers creation of a module constructor as it really creates aliases for the symbols from the imported module.

David


On 9/4/11 3:17 AM, Sean Eskapp wrote:
> I'm compiling a very simple D interface file:
>
>      module std_ext.typetuple;
>
>      public import std.typetuple
>
>      class TypeArray(T...)
>      {
>      }
>
> Compiling it as such:
>      dmd -debug -unittest -D -Dddocs -w -H -o- std_ext/typetuple.d
>
> And including it as such:
>
>      import std_ext.typetuple;
>
>      void main()
>      {
>          TypeArray!(int, double) blah;
>      }
>
> I get a linker error "Symbol Undefined _D7std_ext9typetuple12__ModuleInfoZ"
>
> Removing the public import removes this error. How can I fix this?

September 04, 2011
I wasn't including it on the command line; I thought I didn't need to. That fixed it, thanks!

== Quote from David Nadlinger (see@klickverbot.at)'s article
> Are you specifying std_ext/typetuple.di or whatever it is called when
> compiling the main module? The public import probably triggers creation
> of a module constructor as it really creates aliases for the symbols
> from the imported module.
> David
> On 9/4/11 3:17 AM, Sean Eskapp wrote:
> > I'm compiling a very simple D interface file:
> >
> >      module std_ext.typetuple;
> >
> >      public import std.typetuple
> >
> >      class TypeArray(T...)
> >      {
> >      }
> >
> > Compiling it as such:
> >      dmd -debug -unittest -D -Dddocs -w -H -o- std_ext/typetuple.d
> >
> > And including it as such:
> >
> >      import std_ext.typetuple;
> >
> >      void main()
> >      {
> >          TypeArray!(int, double) blah;
> >      }
> >
> > I get a linker error "Symbol Undefined _D7std_ext9typetuple12__ModuleInfoZ"
> >
> > Removing the public import removes this error. How can I fix this?