linking obj files compiled with LDC2 1.20.0 on Win64

realhet real_het at hotmail.com
Tue Mar 31 12:54:20 UTC 2020


On Tuesday, 24 March 2020 at 15:22:19 UTC, Steven Schveighoffer 
wrote:
> On 3/24/20 10:28 AM, realhet wrote:
>> On Sunday, 22 March 2020 at 20:20:17 UTC, Steven Schveighoffer
> If this were Linux, I'd start using nm to search the object 
> files for the symbol that is missing (like search for symbols 
> defining hasToString), and see if it possibly might be mangled 
> in a different way. I'm not sure what tools there are on 
> Windows to do this.
>
> -Steve

I've found a similar tool in MSVC, it's called DUMPBIN.
I was able to find that the linker errors were correct: I wasn't 
able to find even smaller substrings of that 
std.format.hasToString symbol, it was called like 4 times.

But I had a clue: A problem when trying to call hasToString on my 
struct, so I located all the references for that and I've found 
this thing:

     //infoArray.enumerate.each!writeln;
     //!!! LDC 1.20.0 win64 linker bug when using enumerate 
here!!!!!

     //foreach(i, a; infoArray) writeln(tuple(i, a));
     //!!! linker error as well

     //foreach(i, a; infoArray) writeln(tuple(i, i+1));
     //!!! this is bad as well, the problem is not related to own 
structs, just to tuples

     foreach(i, a; infoArray) writefln("(%s, %s)", i, a);  //this 
works


Now I know that [LDC 1.20.0 win64 -allinst] has a problem 
generating the code for tuple parameters in std.format calls.
This was not a problem in 1.6.0

Now I go on and try my bigger projects.


More information about the Digitalmars-d-learn mailing list