implib and system dlls, oh my

Rikki Cattermole via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Jun 24 05:40:44 PDT 2014


On 25/06/2014 12:34 a.m., Jason King wrote:
> On Tuesday, 24 June 2014 at 04:37:56 UTC, Rikki Cattermole wrote:
>> On 24/06/2014 1:13 p.m., Jason King wrote:
>>> This is me trying to link with Juno and getting tantalizingly close to
>>> success.
>>>
>>> DMD home is d:\d so binaries are d:\d\dmd2\windows\bin (on path)
>>> Juno is in
>>> D:\dlang\Juno-Windows-Class-Library
>>> D:\dlang\Juno-Windows-Class-Library\juno.lib exists
>>> sc.ini is untouched
>>>
>>> D:\dlang\Juno-Windows-Class-Library\examples\com>dmd
>>> -L+d:\dlang\Juno-Windows-Cl
>>> ass-Library\juno.lib -Id:\dlang\Juno-Windows-Class-Library events.d
>>> OPTLINK (R) for Win32  Release 8.00.15
>>> Copyright (C) Digital Mars 1989-2013  All rights reserved.
>>> http://www.digitalmars.com/ctg/optlink.html
>>> d:\dlang\Juno-Windows-Class-Library\juno.lib(core)
>>>  Error 42: Symbol Undefined _VarCmp at 16
>>> --- errorlevel 1
>>>
>>
>> Looks like that's a Windows API function [0].
>> Get it to link with OleAut32 and it should work, if I'm correct.
>>
>
> Thanks, Rikki
> There was a pragma(lib,"oleaut32.lib") in one of the source files, so it
> should have been linking.
> The problem now is that the DM oleaut32.lib doesn't include a _VarCmp at 16.
> I ran lib -l oleaut32.lib to get a list file.  No exported _VarCmp at 16.
> There were 400-odd lines of exports so I believe lib -l worked.
> If I run implib /s oleaut32.lib oleaut32.dll vs. a windows XP
> oleaut32.dll I get an oleaut32.lib that includes a _VarCmp (not
> _VarCmp at 16).
> What's the secret sauce to creating an oleaut32.lib that's fully
> decorated?  Is there a way to get a newer oleaut32.lib into the d
> distributions.  The full dmc oleaut32.lib is also missing _VarCmp at 16 so
> no joy there either.

I don't know enough about implib to explain it.
But another method that I believe should work is to use linker 
definition files.
It'll allow optlink to work.
Just add it to dmd, actually I believe it needs to be passed to Optlink 
(so -L it).

Another fix, might be to use 64bit, but shouldn't be required.

[0] http://www.dsource.org/projects/bindings/wiki/DefFiles/OleAut32


More information about the Digitalmars-d-learn mailing list