www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Public imports with D interface files?

reply Sean Eskapp <eatingstaples gmail.com> writes:
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?
Sep 03 2011
parent reply David Nadlinger <see klickverbot.at> writes:
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?

Sep 03 2011
parent Sean Eskapp <eatingstaples gmail.com> writes:
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?


Sep 03 2011