Building library

yazd via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Aug 29 02:02:04 PDT 2014


On Thursday, 28 August 2014 at 19:29:40 UTC, papaboo wrote:
> Hey
>
> I've just started getting into D and so far I'm just messing
> around with it in a small math library.
> However I've run into an issue while trying to build a library
> and linking it with my main file.
>
> My current file and module layout is
> test.d
> src/math/vector.d - module dragonfly.math.vector
> src/math/quaternion.d - module dragonfly.math.quaternion
>
> Compiling with
> $ dmd test.d src/math/vector.d src/math/quaternion.d && ./test
> works perfectly and runs the way I would expect.
>
> I then tried to compile a library as described
> http://ddili.org/ders/d.en/modules.html, so basically
> $ dmd src/math/vector.d src/math/quaternion.d -lib -ofmath -w
> $ dmd math.a test.d && ./test
>
> But this fails with the following error
> test.d(5): Error: module vector is in file
> 'dragonfly/math/vector.d' which cannot be read
>
> I realize I placed my files in a 'src' dir instead of
> 'dragonfly', but shouldn't explicitly declaring the module name
> in vector.d and quaternion.d fix that?
>
> I'm compiling with dmd v 2.065
>
> Hope someone has an answer for me so I can continue 
> experimenting
> with D.

When compiling test.d, the compiler needs to find the function 
signatures/struct declarations and so on that rely on the other 
modules. To do that, you have to include the other modules for 
the compiler to read. You can do that by:
dmd test.d math.a -Isrc && ./test

When you are using -I flag, the included files are NOT compiled, 
but can be thought of as being used as headers in C/C++.

One other note, note that you should include 'src' folder, and 
the files would be found properly using the module -> filesystem 
mapping.


More information about the Digitalmars-d-learn mailing list