ModuleInfo Error

Steef Boerrigter sxmboer at gmail.com
Mon Oct 24 19:09:17 UTC 2022


On Thursday, 10 August 2017 at 16:05:07 UTC, Johan wrote:
> On Thursday, 10 August 2017 at 14:32:04 UTC, Adam D. Ruppe 
> wrote:
>> On Wednesday, 9 August 2017 at 22:43:03 UTC, Johnson Jones 
>> wrote:
>>
>>> because people cannot cut ties with the past and learn from 
>>> their mistakes.  Do we even need to separate the linker and 
>>> compiler?
>>
>> Like I said though, a lot of D's corporate users see this as 
>> being a major feature for their productivity. So it isn't 
>> quite as clear cut that one way is better than the other.
>
> Separating compilation and linking is helpful for example for 
> reducing the build time of incremental builds and parallelizing 
> builds. A number of language semantics I personally understand 
> in terms of separate codegen and linking, but I am not sure if 
> that's strictly needed (D being a systems language, probably it 
> is). Separate compilation is also needed for cross-language 
> interop (e.g. for a mixed C++/D codebase).
>
>> But Walter has said he is interested in doing an integrated 
>> linker and getting benefits from it, just that's a lot more 
>> work than it sounds like and he has a lot of other things to 
>> do...
>
> Kinke has added LLD to LDC for MSVC, and for other platforms it 
> is a WIP. See https://github.com/ldc-developers/ldc/pull/2142 , 
> https://github.com/ldc-developers/ldc/pull/2203 . So already 
> LDC running on Linux can generate a Windows executable.
>
> -Johan

I have been struggling with this same linking problem.
I have a library folder with *.o files that I compiled into a 
static library: mylibrary.a

In this folder, I have a package.d that publicly imports all the 
.d sources in that folder (as is recommended).

I compile an application in the main folder as follows:

     dmd -I=mylibrary mylibrary/mylibrary.a application.d

Initially, this worked fine, but, at some point after adding 
stuff to the library, I started having the aforementioned linking 
problem.

For me, the problem was fixed when I compiled package.d into 
package.o (dmd -c package.d) and added it to the .a file.
I am guessing, for shared objects (.so files) you also need to 
add the package.o file to the library in order for it to include 
the reference to moduleInfo.

Note that compiling the same program with

     dmd application.d mylibrary/*.d

also works, because that includes the package.d file. If 
package.d is omitted from the list you get the exact same ld: 
undefined reference to _...._ModuleInfoZ




More information about the Digitalmars-d mailing list