newbie confusion with arrays and structs
Jesse Phillips
jessekphillips+D at gmail.com
Thu Jan 26 15:32:04 PST 2012
On Thursday, 26 January 2012 at 22:10:23 UTC, Justin Whear wrote:
> If you want your Array code to be a separate library/project,
> you can compile it like so:
> dmd Array.d -lib
>
> Then when you compile your other project:
> dmd prd.d -I/location/of/Array.d -L/location/of/Array.so
>
> Justin
It is actually a little more than that.
dmd array.d -lib -oflibarray.a
dmd does no currently generate shared libraries, so .a (archive)
is used.
dmd prd.d -I. -L-L. -L-larray
-I (Include directory, used by compiler for locating "header"
files. These are used by the compiler to verify the calls you are
making into the library, and to generate code from templates if
those are being used)
-L-L (Pass to the linker the flag -L. The ld linker flag -L is
for the library search path)
-L-l (Pass the linker the flag -l. The ld linker flag -l request
that a library be linked)
Libraries are named starting with lib by Unix convention. When
passing the library name this is left off (-lm load libm.so or
libm.a). I believe you can leave it on though (-llibm) but am not
sure.
The reason DMD does not compile imported libraries is because of
two reasons. When the magic stops working you still have to deal
with and understand these steps. The compiler is busy with its
job of converting code, it should be helping other tools to make
its job simple ("Compiler as a Service"). You will find rdmd is
distributed with dmd:
rdmd prd.d
More information about the Digitalmars-d-learn
mailing list