etc.c.zlib help

Mike Parker via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jul 2 19:16:48 PDT 2015


On 7/3/2015 8:44 AM, Matthew Gamble wrote:
> Thanks to Nicholas and Laeeth for all the suggestions. In the process of
> trying to explicitly link to zlib.dll like a do for C++, I came across a
> strange development. I changed the platform to x64 (Visual D) and now
> the program compiles and runs fine without errors. This is without
> pointing the linker to zlib.dll. While this allows me to continue
> developing my program, I'm a bit concerned about why this would fix the
> error and why etc.c.zlib cannot be compiled for 32bit on a 64bit
> machine(Windows). Does this give anyone any insights into this problem?
>
The Phobos source actually includes the C source for zlib. You can find 
it in the DMD distribution in src/phobos/etc/c/zlib/. When Phobos is 
compiled, it also compiles zlib and pulls the library into the final 
Phobos lib. You don't need the zlib DLL.

You have no error in 64-bit because it's working as expected. The trick 
now is to determine what's screwing things up in 32-bit. The starting 
point is at [1]. A quick bit of googling appears to suggest that 
_lseeki64 is a function specific to the Microsoft C runtime. I assume 
you're seeing the linker error because the DMC C runtime, which is the 
default used by DMD on Windows, does not include this function. If you 
compile using -m32mscoff (which also requires compiling a compatible 
version of Phobos), you'll be using the MS toolchain for 32-bit and the 
error should go away.

This is all assumption, but it's where I would start. And if this 
actually is the issue ([2] suggests it is), I'm surprised it hasn't 
turned up before now.

[1] 
https://github.com/D-Programming-Language/phobos/blob/master/etc/c/zlib/gzlib.c#L8
[2] http://www.digitalmars.com/d/archives/c++/windows/32-bits/440.html




More information about the Digitalmars-d-learn mailing list