Thread overview | ||||||
---|---|---|---|---|---|---|
|
November 11, 2009 error linking to my own custom module | ||||
---|---|---|---|---|
| ||||
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! |
November 11, 2009 Re: error linking to my own custom module | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sean Fennell | 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.
|
November 11, 2009 Re: error linking to my own custom module | ||||
---|---|---|---|---|
| ||||
Posted in reply to torhu | 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
|
November 11, 2009 Re: error linking to my own custom module | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lars T. Kyllingstad | 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.
|
Copyright © 1999-2021 by the D Language Foundation