On 8/21/21 8:46 PM, Brian Tiffin wrote:

> prompt$ cat B.d
> module B;
> version = boss;

A cannot know about 'version' condition inside B.

The solution is to provide version on the command line. This is how I do it with dmd:

$ dmd -version=boss [...]

(So, remove 'version = boss;' line in B.d)

> But I'm getting a link error from gdc
>
> ```
> prompt$ gdc -o B B.d
> /tmp/ccWg1BrF.o: In function `_Dmain':
> B.d:(.text+0x52): undefined reference to `_D1A7commandFAAyaZi'
> collect2: error: ld returned 1 exit status
> ```
>
> Is it just wrong thinking and *try again, ya noob*?   ;-)

Never! :)

D modules work both like C's .h files and .c files. (Well, more like C++'s .h files because templates don't need .cpp part.) We import for declarations but we must also include for linking. Again, this is how it works with dmd:

$ dmd B.d A.d -version=boss

Another option is to use dmd's -i switch, which automatically includes modules for linking but I don't have experience with it other than it works:

$ dmd B.d -version=boss -i

(-i can take a pattern as well.)

Ali

Reply via email to