error linking to my own custom module

Sean Fennell fennellstyle at gmail.com
Wed Nov 11 08:52:55 PST 2009


Lars T. Kyllingstad Wrote:

> torhu wrote:
> > On 11.11.2009 04:57, Sean Fennell wrote:
> >> I'm very green to D, just learning it now.
> >> I have a module that I wrote.  Its pretty simple, just helper 
> >> functions to get input from user as certain data types
> >> GetInt()
> >> GetString()
> >> GetChar()
> >> etc...
> >>
> >> I compiled the module using dmd -lib mymod.d which output mymod.a
> >>
> >> Now I've imported my module into ask.d to test it and I get the 
> >> folliowing linking error when I try to compile:
> >>
> >> ask.o:(.data+0x4c): undefined reference to `_D4mymod12__ModuleInfoZ`
> >> My dir structure looks like this:
> >>
> >> project/
> >> ---ask.d
> >> ---lib/
> >> ------mymod.d
> >> ------mymod.a
> >>
> >> and my import line is:
> >>
> >> import lib.mymod;
> >>
> >> Anyone seen this before? Using linux dmd v2.036
> >>
> >> Thanks!
> >>
> > 
> > You have to hand all the files to the compiler, otherwise there will be 
> > missing symbols when the compiler runs the linker.
> > 
> > Like this:
> > dmd ask lib/mymod
> > 
> > Compiling to a library first, like you did, will work too.  But you have 
> > to hand the compiler everything when you want to create the actual 
> > executable:
> > 
> > dmd ask lib/mymod.a
> > 
> > There are build tools, like dsss, that will automate this for you.
> 
> 
> I've found rdmd to be a very useful program. It will track down all 
> imports in your program and feed the relevant files to the compiler. 
> Here are some examples:
> 
> To compile and run your program:
>    rdmd ask
> 
> To compile, but not run your program:
>    rdmd --build-only ask
> 
> Actually, I tend to just put a shebang line in my main D source file and 
> mark it as executable:
> 
>    ask.d:
>       #!/path/to/rdmd --shebang
>       import lib.mymod;
>       ...
> 
> Then, after you make changes to your program and want to test it, you 
> just run ./ask.d. :)
> 
> Note that rdmd only creates a temporary executable, so it's more of a 
> testing tool than a build tool.
> 
> -Lars


Thank you both.  Both options worked for me and I'm happily compiling.


More information about the Digitalmars-d-learn mailing list