Skip to content

ADSupport does not generate correct static mingw libs for GraphicsMagick #18

@Engbretson

Description

@Engbretson

If one wishes to use the NDFileMagick plugin with at least mingw x64, certain library references are unresolved.
/mnt/c/epics71/areaDetector-3-2/ADCore-3-2/lib/windows-x64-mingw/NDPlugin.lib(NDFileMagick.o):NDFileMagick.cpp:(.text+0x2a1): undefined reference to __imp__ZN6Magick5ImageC1Ev' /mnt/c/epics71/areaDetector-3-2/ADCore-3-2/lib/windows-x64-mingw/NDPlugin.lib(NDFileMagick.o):NDFileMagick.cpp:(.text+0x3ba): undefined reference to __imp__ZN6Magick5Image4typeEN9MagickLib9ImageTypeE'
/mnt/c/epics71/areaDetector-3-2/ADCore-3-2/lib/windows-x64-mingw/NDPlugin.lib(NDFileMagick.o):NDFileMagick.cpp:(.text+0x3ed): undefined reference to __imp__ZN6Magick5Image4readEjjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN9MagickLib11StorageTypeEPKv' /mnt/c/epics71/areaDetector-3-2/ADCore-3-2/lib/windows-x64-mingw/NDPlugin.lib(NDFileMagick.o):NDFileMagick.cpp:(.text+0x405): undefined reference to __imp__ZN6Magick5Image7channelEN9MagickLib11ChannelTypeE'
/mnt/c/epics71/areaDetector-3-2/ADCore-3-2/lib/windows-x64-mingw/NDPlugin.lib(NDFileMagick.o):NDFileMagick.cpp:(.text+0x412): undefined reference to __imp__ZN6Magick5Image7qualityEj' /mnt/c/epics71/areaDetector-3-2/ADCore-3-2/lib/windows-x64-mingw/NDPlugin.lib(NDFileMagick.o):NDFileMagick.cpp:(.text+0x41f): undefined reference to __imp__ZN6Magick5Image5depthEj'
/mnt/c/epics71/areaDetector-3-2/ADCore-3-2/lib/windows-x64-mingw/NDPlugin.lib(NDFileMagick.o):NDFileMagick.cpp:(.text+0x42a): undefined reference to __imp__ZN6Magick5Image12compressTypeEN9MagickLib15CompressionTypeE' /mnt/c/epics71/areaDetector-3-2/ADCore-3-2/lib/windows-x64-mingw/NDPlugin.lib(NDFileMagick.o):NDFileMagick.cpp:(.text+0x48c): undefined reference to __imp__ZN6Magick5Image5writeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE'
/mnt/c/epics71/areaDetector-3-2/ADCore-3-2/lib/windows-x64-mingw/NDPlugin.lib(NDFileMagick.o):NDFileMagick.cpp:(.text+0x4ad): undefined reference to __imp__ZN6Magick5ImageD1Ev' /mnt/c/epics71/areaDetector-3-2/ADCore-3-2/lib/windows-x64-mingw/NDPlugin.lib(NDFileMagick.o):NDFileMagick.cpp:(.text+0x5d1): undefined reference to __imp__ZN6Magick5ImageD1Ev'
/mnt/c/epics71/areaDetector-3-2/ADCore-3-2/lib/windows-x64-mingw/NDPlugin.lib(NDFileMagick.o):NDFileMagick.cpp:(.text+0x726): undefined reference to __imp__ZN6Magick5ImageC1Ev' /mnt/c/epics71/areaDetector-3-2/ADCore-3-2/lib/windows-x64-mingw/NDPlugin.lib(NDFileMagick.o):NDFileMagick.cpp:(.text+0x7a1): undefined reference to __imp__ZN6Magick16InitializeMagickEPKc'
/mnt/c/epics71/areaDetector-3-2/ADCore-3-2/lib/windows-x64-mingw/NDPlugin.lib(NDFileMagick.o):NDFileMagick.cpp:(.text+0x7fc): undefined reference to __imp__ZN6Magick5ImageD1Ev' /mnt/c/epics71/areaDetector-3-2/ADCore-3-2/lib/windows-x64-mingw/NDPlugin.lib(NDFileMagick.o):NDFileMagick.cpp:(.text$_ZN12NDFileMagickD1Ev[_ZN12NDFileMagickD1Ev]+0x2e): undefined reference to __imp__ZN6Magick5ImageD1Ev'
/mnt/c/epics71/areaDetector-3-2/ADCore-3-2/lib/windows-x64-mingw/NDPlugin.lib(NDFileMagick.o):NDFileMagick.cpp:(.text$_ZN12NDFileMagickD0Ev[_ZN12NDFileMagickD0Ev]+0x2e): undefined reference to `__imp__ZN6Magick5ImageD1Ev'
collect2: error: ld returned 1 exit status
This is due to the include.h file in the Magick++ directory being

#if (defined(WIN32) || defined(WIN64)) && !defined (CYGWIN) //&& !defined(MINGW32)

So by default all flavors of mingw get

MagickDLLDecl __declspec(dllexport)

Even when your building static libraries

Making this change seems to work for me, but only tested with the x64 version of mingw

#if (defined(WIN32) || defined(WIN64)) && !defined (CYGWIN) && !defined(MINGW32) && !defined(MINGW64)

Not tested to see what happens if shared libraries are actually required,

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions