Building library

papaboo via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Aug 29 12:53:32 PDT 2014


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. :)


More information about the Digitalmars-d-learn mailing list