On Friday, 29 August 2014 at 09:02:05 UTC, yazd wrote:
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.
Thanks for the answers everyone.
The -I flag comes closest to solving the issue. Ideally I would
like to be able to alias my src folder to dragonfly in the module
system while compiling smaller libs. But if that's not possible
then adding a dragonfly folder to src and using -Isrc to point
the compiler towards the right folders will work just fine.
Off to play with libraries. :)