I have an augmented CreateDLL tool available here (local version 1.2.5)
which has been tested for a year on MSVC2k5/2k8 x86/x64 production
environments. One of the (major?) changes in there is what it takes from the
map files, and that includes 'extern "C" exports in particular as we use
CreateDLL outside the OpenEXR realm, where we have several third party (OSS)
libraries which export C++ and C functions; CreateDLL removed the necesity
to manually maintain DEF files (a real nuisance) or tweak header files to
add conditional __dllexport (or whatever that particular MSVC pragma
incantation was again) which was a whole other level of nuisance too.

I promised to post it here about a year ago and never found a good excuse to
take the time and actually do so.

It should work as a drop-in replacement of the current CreateDLL code; I
can't guarantee success as I don't have your exact collection of items in
use here (I don't use ImageMagick with OpenEXR), but if you're willing to
give it a try, I can package ours and post it.
It comes with an augmented ChangeLog where the edits are described at a
functional level, so it's not just a chunk of code gibberish landing on your
lap.

(One issue the current CreateDLL tool in OpenEXR distros has is that it
doesn't corectly drive the MSVC linker for X64 and Itanium targets.)

Re 'extern "C": those entries exist in the map files as long as you compile
with /DEBUG flags to tell the compiler to spit out a full map file as
required by the 'regular' CreateDDL tool as well (no change there); it's
just that the exports are different for X64 and Itanium targets: x86 adds
the well-known _ underscore prefix, while X64 leaves them out and (IIRC,
it's been a while) Itanium adds a '.' dot. Anyway, our version recognizes
and copes with those plus it allows some further MSVC linker support with
regards to 'whole program optimization' which happens and linker time and
you would lose with CreateDLL before as it wasn't able to pass through all
those wicked command line switches.

Anyway, this is off the top of my head. Just give the word and a CreateDLL
source will be on its way.



On Wed, Mar 10, 2010 at 5:57 PM, Stephan Menzel <stephan.men...@gmail.com>wrote:

> Hi guys,
>
> I am currently trying to get OpenEXR to run in a multiplatform 32/64
> bit Windows and Linux environment. So far I made quite OK progress
> with adopting your build system to windows and enabling 64bit support.
>
> There's just a big problem left: The createDLL tool, which I had to
> modify according to
> http://osdir.com/ml/video.openexr.devel/2007-11/msg00008.html
> eliminates all the C style linkage wrapper functions from the DLL.
> Specifically those in ImfCRgbaFile.h. The symbols in there are missing
> in the DLLon both 32 and 64 bit windows. Unfortunately, the whole
> purpose for this exercise for me is usage in ImageMagick and this uses
> exactly those methods and none other. So even though I got the DLL I
> still can't use it. And I have no idea how to modify createDLL any
> further, because it's apparently the extern "C" linkage that messes
> things up.
>
> Have you guys any idea what I could do there?
>
> I would be willing to contribute build system changes so you could
> benefit from 64 bit support as well.
>
> Cheers,
> Stephan
>
>
> _______________________________________________
> Openexr-devel mailing list
> Openexr-devel@nongnu.org
> http://lists.nongnu.org/mailman/listinfo/openexr-devel
>



-- 
Met vriendelijke groeten / Best regards,

Ger Hobbelt

--------------------------------------------------
web:    http://www.hobbelt.com/
       http://www.hebbut.net/
mail:   g...@hobbelt.com
mobile: +31-6-11 120 978
--------------------------------------------------
_______________________________________________
Openexr-devel mailing list
Openexr-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/openexr-devel

Reply via email to