dmd -unittest -main -run: undefined reference to `_D1c12__ModuleInfoZ'

kdevel kdevel at vogtner.de
Wed May 1 23:18:59 UTC 2019


On Wednesday, 1 May 2019 at 22:35:12 UTC, ag0aep6g wrote:
[...]
> Or use -i so that DMD compiles the imported module 
> automatically:
>
>     dmd -unittest -main -i -run package.d

Now I have:

a/main.d
a/b/package.d
a/b/c/package.d

b/package.d and c/package.d as before. a/main.d is

```
import b;

void dummy ()
{
    string s = "test";
    mkdir (s);
}
```

In cwd a/ with

    $ dmd -unittest -main -i -run main.d

I get

    b/package.d(2): Error: module `c` is in file 'c.d' which 
cannot be read
    import path[0] = /.../dmd2/linux/bin64/../../src/phobos
    import path[1] = 
/.../dmd2/linux/bin64/../../src/druntime/import

Why does dmd not get it? I have to supply -I=b explicitly. Which 
leads me to
the actual problem I wanted to post:

    $ dmd -unittest -main -I=b -run main.d
    main.d(6): Error: undefined identifier mkdir

The problem I see here is that b passes the isolated unittest. 
But when it is used undefined symbols show up. I stumbled over 
this problem while using a project as submodule which uses 
msgpack-d as its submodule. Only if I restrict
the import like in

    import msgpack : unpack, pack;

my submodule's unittest fails right away. My submodule 
corresponds to b/package.d in this thread. I suppose the line

     package import std.file, core.stdc.string;

in msgpack-d's file packer.d causes the export of mkdir. Right?


More information about the Digitalmars-d-learn mailing list