[SOLVED] Error when using Magick++: unknown type name 'ssize_t'

Magick++ is an object-oriented C++ interface to ImageMagick. Use this forum to discuss, make suggestions about, or report bugs concerning Magick++.
Post Reply
User avatar
dan9er
Posts: 16
Joined: 2019-09-18T18:13:57-07:00
Authentication code: 1152
Location: Canada

[SOLVED] Error when using Magick++: unknown type name 'ssize_t'

Post by dan9er »

I've just successfully(?) compiled Magick++ for my Windows 10 system, and I'm getting errors like these when I try to compile my program that uses it:

Code: Select all

C:\Users\dan9e\Desktop\cartogrtist\cartogrtist\build>make
Scanning dependencies of target cartogrtist
[ 10%] Building CXX object CMakeFiles/cartogrtist.dir/src/block/block.cpp.obj
In file included from C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/src/block/block.cpp:17:
In file included from C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/src/block/block.h:23:
In file included from C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\Magick++/Color.h:11:
In file included from C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\Magick++/Include.h:42:
In file included from C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/MagickCore.h:79:
In file included from C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/annotate.h:21:
In file included from C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/draw.h:21:
C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/geometry.h(115,3): error: unknown type name 'ssize_t'
  ssize_t
  ^
C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/geometry.h(133,3): error: unknown type name 'ssize_t'
  ssize_t
  ^
C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/geometry.h(146,28): error: unknown type name 'ssize_t'
  GetGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *),
                           ^
C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/geometry.h(146,38): error: unknown type name 'ssize_t'
  GetGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *),
                                     ^
C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/geometry.h(152,34): error: unknown type name 'ssize_t'
  ParseMetaGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *),
                                 ^
C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/geometry.h(152,44): error: unknown type name 'ssize_t'
  ParseMetaGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *),
Compiled ImageMagick version is 7.0.8-67
VS Build Tools 2019 version is 16.3.2
Using GNU Make 3.81
Using LLVM clang-cl 8.0.1
Imported .lib file is called CORE_RL_Magick++.lib
Last edited by dan9er on 2019-10-11T14:13:37-07:00, edited 1 time in total.
snibgo
Posts: 12159
Joined: 2010-01-23T23:01:33-07:00
Authentication code: 1151
Location: England, UK

Re: Error when using Magick++: unknown type name 'ssize_t'

Post by snibgo »

What is included in your source code? I expect something like:

Code: Select all

#include <Magick++.h>
#include <string>
#include <iostream>
If you are directly including Color.h etc then that is the problem.
snibgo's IM pages: im.snibgo.com
User avatar
dan9er
Posts: 16
Joined: 2019-09-18T18:13:57-07:00
Authentication code: 1152
Location: Canada

Re: Error when using Magick++: unknown type name 'ssize_t'

Post by dan9er »

snibgo wrote: 2019-10-05T18:33:17-07:00 What is included in your source code? I expect something like:

Code: Select all

#include <Magick++.h>
#include <string>
#include <iostream>
If you are directly including Color.h etc then that is the problem.
I did that, still having the same issue:

Code: Select all

C:\Users\dan9e\Desktop\cartogrtist\cartogrtist\build>make
Scanning dependencies of target cartogrtist
[ 10%] Building CXX object CMakeFiles/cartogrtist.dir/src/block/block.cpp.obj
In file included from C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/src/block/block.cpp:17:
In file included from C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/src/block/block.h:23:
In file included from C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\Magick++.h:10:
In file included from C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\Magick++/Include.h:42:
In file included from C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/MagickCore.h:79:
In file included from C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/annotate.h:21:
In file included from C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/draw.h:21:
C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/geometry.h(115,3): error: unknown type name 'ssize_t'
  ssize_t
  ^
C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/geometry.h(133,3): error: unknown type name 'ssize_t'
  ssize_t
  ^
C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/geometry.h(146,28): error: unknown type name 'ssize_t'
  GetGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *),
                           ^
C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/geometry.h(146,38): error: unknown type name 'ssize_t'
  GetGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *),
                                     ^
C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/geometry.h(152,34): error: unknown type name 'ssize_t'
  ParseMetaGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *),
                                 ^
C:/Users/dan9e/Desktop/cartogrtist/cartogrtist/include\MagickCore/geometry.h(152,44): error: unknown type name 'ssize_t'
  ParseMetaGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *),
                                           ^
Did I muck up something while compiling IM?
snibgo
Posts: 12159
Joined: 2010-01-23T23:01:33-07:00
Authentication code: 1151
Location: England, UK

Re: Error when using Magick++: unknown type name 'ssize_t'

Post by snibgo »

IM source code includes sample CPP programs. Do they build correctly?
snibgo's IM pages: im.snibgo.com
User avatar
dan9er
Posts: 16
Joined: 2019-09-18T18:13:57-07:00
Authentication code: 1152
Location: Canada

Re: Error when using Magick++: unknown type name 'ssize_t'

Post by dan9er »

snibgo wrote: 2019-10-06T14:46:13-07:00 IM source code includes sample CPP programs. Do they build correctly?
Just tried to compile demo.cpp, getting same crap:

Code: Select all

C:\Users\dan9e\Desktop\cartogrtist\ImageMagick-Windows\ImageMagick\Magick++\demo\demo\build>make -j8
[ 50%] Building CXX object CMakeFiles/demo.dir/src/demo.cpp.obj
In file included from C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/src/demo.cpp:13:
In file included from C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\Magick++.h:10:
In file included from C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\Magick++/Include.h:42:
In file included from C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\MagickCore/MagickCore.h:79:
In file included from C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\MagickCore/annotate.h:21:
In file included from C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\MagickCore/draw.h:21:
C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\MagickCore/geometry.h(115,3): error: unknown type name 'ssize_t'
  ssize_t
  ^
C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\MagickCore/geometry.h(133,3): error: unknown type name 'ssize_t'
  ssize_t
  ^
C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\MagickCore/geometry.h(146,28): error: unknown type name
      'ssize_t'
  GetGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *),
                           ^
C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\MagickCore/geometry.h(146,38): error: unknown type name
      'ssize_t'
  GetGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *),
                                     ^
C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\MagickCore/geometry.h(152,34): error: unknown type name
      'ssize_t'
  ParseMetaGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *),
                                 ^
C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\MagickCore/geometry.h(152,44): error: unknown type name
      'ssize_t'
  ParseMetaGeometry(const char *,ssize_t *,ssize_t *,size_t *,size_t *),
                                           ^
There are more errors, but they all involve ssize_t. >=20 errors, since make just stops trying after that. If you want I could pastebin the full log with -ferror-limit=0.

CMakeLists.txt:

Code: Select all

cmake_minimum_required(VERSION 3.15)
project(demo)

# compile with C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# set some stuff for Magick++ so it doesn't yell warnings at us
add_compile_definitions(MAGICKCORE_HDRI_ENABLE=0 MAGICKCORE_QUANTUM_DEPTH=8)

# create the executable
add_executable(demo ${CMAKE_SOURCE_DIR}/src/demo.cpp)

# set directories for libraries and includes
target_include_directories(demo PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_link_directories(demo PRIVATE ${CMAKE_SOURCE_DIR}/lib)

# link libraries to executable
target_link_libraries(demo ${CMAKE_SOURCE_DIR}/lib/CORE_RL_Magick++_.lib)
Relevant file tree:

Code: Select all

ImageMagick-Windows\ImageMagick\Magick++\demo
|   analyze.cpp
|   button.cpp
|   demos.tap
|   detrans.cpp
|   flip.cpp
|   gravity.cpp
|   piddle.cpp
|   shapes.cpp
|   smile_anim.miff
|   tile.miff
|   zoom.cpp
|
\---demo
    |   CMakeLists.txt
    |
    +---build
    |   |   CMakeCache.txt
    |   |   cmake_install.cmake
    |   |   Makefile
    |   |   model.miff
    |   |   smile.miff
    |   |
    |   \---CMakeFiles
    |       [CMake's stuff...]
    |
    +---include
    |   |   Magick++.h
    |   |
    |   +---Magick++
    |   |       [.h files...]
    |   |
    |   +---MagickCore
    |   |       [.h files...]
    |   |
    |   \---MagickWand
    |           [.h files...]
    |
    +---lib
    |       CORE_RL_Magick++_.lib
    |       CORE_RL_MagickCore_.lib
    |       CORE_RL_MagickWand_.lib
    |
    \---src
            demo.cpp
snibgo
Posts: 12159
Joined: 2010-01-23T23:01:33-07:00
Authentication code: 1151
Location: England, UK

Re: Error when using Magick++: unknown type name 'ssize_t'

Post by snibgo »

Okay, so the problem isn't in the source code, but in the building method. Sorry, I know nothing about the tools you use. Perhaps there is a flag to make the compiler POSIX-compliant, or something.
snibgo's IM pages: im.snibgo.com
User avatar
magick
Site Admin
Posts: 11064
Joined: 2003-05-31T11:32:55-07:00

Re: Error when using Magick++: unknown type name 'ssize_t'

Post by magick »

The Windows configure script auto-generates magick-baseconfig.h. It includes a define for ssize_t as follows:

Code: Select all

#if !defined(ssize_t) && !defined(__MINGW32__)
#if defined(_WIN64)
typedef __int64 ssize_t;
#else
typedef long ssize_t;
#endif
#endif
User avatar
dan9er
Posts: 16
Joined: 2019-09-18T18:13:57-07:00
Authentication code: 1152
Location: Canada

Re: Error when using Magick++: unknown type name 'ssize_t'

Post by dan9er »

magick wrote: 2019-10-07T03:02:35-07:00 The Windows configure script auto-generates magick-baseconfig.h. It includes a define for ssize_t as follows:

Code: Select all

#if !defined(ssize_t) && !defined(__MINGW32__)
#if defined(_WIN64)
typedef __int64 ssize_t;
#else
typedef long ssize_t;
#endif
#endif
Well... I was using the .h files from my Unix machine. I assumed the includes are the same across platforms. I was mistaken. I've replaced the .h files in the demo/demo/include folder with the Windows ones I generated when compiling IM, and now it's no longer complaining about ssize_t!

Now it's giving warnings about redefined preprocessor variables and deprecated Windows Kit methods:

Code: Select all

C:\Users\dan9e\Desktop\cartogrtist\ImageMagick-Windows\ImageMagick\Magick++\demo\demo\build>make
Scanning dependencies of target demo
[ 50%] Building CXX object CMakeFiles/demo.dir/src/demo.cpp.obj
In file included from C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/src/demo.cpp:13:
In file included from C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\Magick++.h:10:
In file included from C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\Magick++/Include.h:14:
In file included from C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\MagickCore/magick-config.h:25:
C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\MagickCore/magick-baseconfig.h(61,9): warning:
      'MAGICKCORE_QUANTUM_DEPTH' macro redefined [-Wmacro-redefined]
#define MAGICKCORE_QUANTUM_DEPTH 16
        ^
<command line>(5,9): note: previous definition is here
#define MAGICKCORE_QUANTUM_DEPTH 8
        ^
In file included from C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/src/demo.cpp:13:
In file included from C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\Magick++.h:10:
In file included from C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\Magick++/Include.h:14:
In file included from C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\MagickCore/magick-config.h:25:
C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/include\MagickCore/magick-baseconfig.h(66,9): warning:
      'MAGICKCORE_HDRI_ENABLE' macro redefined [-Wmacro-redefined]
#define MAGICKCORE_HDRI_ENABLE 1
        ^
<command line>(4,9): note: previous definition is here
#define MAGICKCORE_HDRI_ENABLE 0
        ^
C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/src/demo.cpp(31,8): warning: 'getenv' is deprecated: This function or
      variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
      [-Wdeprecated-declarations]
    if(getenv("SRCDIR") != 0)
       ^
C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt\stdlib.h(1190,20): note: 'getenv' has been explicitly marked deprecated here
    _Check_return_ _CRT_INSECURE_DEPRECATE(_dupenv_s)
                   ^
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.23.28105\include\vcruntime.h(309,55): note: expanded from macro
      '_CRT_INSECURE_DEPRECATE'
        #define _CRT_INSECURE_DEPRECATE(_Replacement) _CRT_DEPRECATE_TEXT(    \
                                                      ^
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.23.28105\include\vcruntime.h(299,47): note: expanded from macro
      '_CRT_DEPRECATE_TEXT'
#define _CRT_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text))
                                              ^
C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/src/demo.cpp(32,16): warning: 'getenv' is deprecated: This function or
      variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
      [-Wdeprecated-declarations]
      srcdir = getenv("SRCDIR");
               ^
C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt\stdlib.h(1190,20): note: 'getenv' has been explicitly marked deprecated here
    _Check_return_ _CRT_INSECURE_DEPRECATE(_dupenv_s)
                   ^
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.23.28105\include\vcruntime.h(309,55): note: expanded from macro
      '_CRT_INSECURE_DEPRECATE'
        #define _CRT_INSECURE_DEPRECATE(_Replacement) _CRT_DEPRECATE_TEXT(    \
                                                      ^
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.23.28105\include\vcruntime.h(299,47): note: expanded from macro
      '_CRT_DEPRECATE_TEXT'
#define _CRT_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text))
                                              ^
C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/src/demo.cpp(85,11): warning: 'getenv' is deprecated: This function or
      variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
      [-Wdeprecated-declarations]
      if (getenv("MAGICK_FONT") != 0)
          ^
C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt\stdlib.h(1190,20): note: 'getenv' has been explicitly marked deprecated here
    _Check_return_ _CRT_INSECURE_DEPRECATE(_dupenv_s)
                   ^
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.23.28105\include\vcruntime.h(309,55): note: expanded from macro
      '_CRT_INSECURE_DEPRECATE'
        #define _CRT_INSECURE_DEPRECATE(_Replacement) _CRT_DEPRECATE_TEXT(    \
                                                      ^
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.23.28105\include\vcruntime.h(299,47): note: expanded from macro
      '_CRT_DEPRECATE_TEXT'
#define _CRT_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text))
                                              ^
C:/Users/dan9e/Desktop/cartogrtist/ImageMagick-Windows/ImageMagick/Magick++/demo/demo/src/demo.cpp(86,29): warning: 'getenv' is deprecated: This function or
      variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
      [-Wdeprecated-declarations]
        example.font(string(getenv("MAGICK_FONT")));
                            ^
C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt\stdlib.h(1190,20): note: 'getenv' has been explicitly marked deprecated here
    _Check_return_ _CRT_INSECURE_DEPRECATE(_dupenv_s)
                   ^
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.23.28105\include\vcruntime.h(309,55): note: expanded from macro
      '_CRT_INSECURE_DEPRECATE'
        #define _CRT_INSECURE_DEPRECATE(_Replacement) _CRT_DEPRECATE_TEXT(    \
                                                      ^
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.23.28105\include\vcruntime.h(299,47): note: expanded from macro
      '_CRT_DEPRECATE_TEXT'
#define _CRT_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text))
                                              ^
6 warnings generated.
About the variable redefinitions, you might remember I've set those in my CMakeLists.txt:
dan9er wrote: 2019-10-06T18:59:42-07:00

Code: Select all

# set some stuff for Magick++ so it doesn't yell warnings at us
add_compile_definitions(MAGICKCORE_HDRI_ENABLE=0 MAGICKCORE_QUANTUM_DEPTH=8)
I don't know why IM is overriding them. Is this a Windows quirk?
I think the getenv stuff is the demo program's fault though. It should probably be changed to _dupenv_s...

Yet another issue is that the linker, well, pukes at me about unresolved external symbols. However, I'm getting a similar issue to that on my Linux machine as well so I'll leave it to it's own thread.
User avatar
dan9er
Posts: 16
Joined: 2019-09-18T18:13:57-07:00
Authentication code: 1152
Location: Canada

Re: [SOLVED] Error when using Magick++: unknown type name 'ssize_t'

Post by dan9er »

Seeing my bump got removed, I'm just going to mark the thread as solved and make a a new thread for my new problem.

Thank you magick & snibgo.
Post Reply