comp.lang.ada
 help / color / mirror / Atom feed
* Problem Building Ada Interface To ImageMagick 7
@ 2018-06-26  8:28 Roger
  2018-06-26  9:26 ` alby.gamper
  2018-06-26  9:34 ` gautier_niouzes
  0 siblings, 2 replies; 25+ messages in thread
From: Roger @ 2018-06-26  8:28 UTC (permalink / raw)


OSX 10.13.5
GNAT community 2018
XCode 9.4.1

ImageMagic Libraries:
libMagick++-7.Q16HDRI
libMagickCore-7.Q16HDRI

I have been developing some Ada Interfaces To ImageMagick 7 but have come to a problem that I need help with.
I built the ImageMagick libraries with:
CC=clang CXX="clang++ -std=c++11 -stdlib=libc++ -g -O0"  CFLAGS="-g -O0" CXXFLAGS="-g -O0" ./configure --prefix=/opt --with-quantum-depth=16 --disable-dependency-tracking --without-perl
I enabled debugging (-g) to allow me to track through the ImageMagick code , C++ in particular which I find almost impossible to reverse engineer from the source alone.
My C++ capabilities are very limited.

The following code works OK under XCode but crashes (segmentation fault) under GNAT.

#include <string>
#include <stdio.h>
#include "/opt/include/ImageMagick-7/Magick++.h"
#include "Image.h"

using namespace Magick;

int main()
{
  Image   anImage;

  ssize_t  max_length = 0;
  ssize_t  foo_len;
  ssize_t  copied_str_len = 0;
  ssize_t  buff_len = 4096;
  size_t   rows = 0;
  std::string foo("12345678901234567890\n12345678901234567890");
  std::string bf = "";
  char bar[buff_len];

  max_length=sizeof(foo) - 1;
  foo_len=foo.length();
  printf ("foo length %zd bytes.\n", foo_len);

  printf ( "Maximum length: %zd\n", max_length);
  printf ("Rows: %zd\n", rows);
  try {bf = anImage.baseFilename();}
  catch (Error& my_error) {printf ("%s", my_error.what());}
  catch (...) {printf ("Unhandled error\n");}
  printf ("Rows: %zd\n", rows);
    printf ("baseFilename: %s\n", anImage.baseFilename().c_str());

  printf ("Copied string length: %zd\n", copied_str_len);
  printf ("bar: \n%s\n", bar);
}

Under GNAT GPS it produces:
foo length 41 bytes.
Maximum length: 7
Rows: 0
[2018-06-26 18:02:10] process terminated successfully, elapsed time: 00.73s
So it appears to terminate after the first  printf ("Rows: %zd\n", rows);
That is, it terminates during the call to  anImage.baseFilename();

When I run the executable from the terminal:
foo length 41 bytes.
Maximum length: 7
Rows: 0
Segmentation fault: 11

Running the same code under XCode produces.

foo length 41 bytes.
Maximum length: 23
Rows: 0
Rows: 0
baseFilename: 
Copied string length: 0
bar: 

Program ended with exit code: 0
 The code above is a cut down version of my test code.
The complete version works under XCode.

 The problem seems to concern C++ string processing.
A problem that one of my build attempts reported  appeared to concern the string Swap function being unable to handle null parameters.
Unfortunately, I can't recall how I got that information.

I have tried numerous methods to solve this problem but am unable to. It seems that GNAT is using a different C++ compiler to XCode but I've had no success trying to remedy that idea.

Positive advice on how to proceed will be greatly appreciated.


^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2018-06-30  1:25 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-26  8:28 Problem Building Ada Interface To ImageMagick 7 Roger
2018-06-26  9:26 ` alby.gamper
2018-06-26 11:58   ` Roger
2018-06-26 12:35     ` alby.gamper
2018-06-26 13:43       ` Roger
2018-06-27  2:08         ` Roger
2018-06-26 18:58   ` Jacob Sparre Andersen
2018-06-30  1:25   ` Roger
2018-06-26  9:34 ` gautier_niouzes
2018-06-26 11:51   ` Roger
2018-06-26 13:13   ` Roger
2018-06-26 16:28     ` gautier_niouzes
2018-06-26 17:47       ` Roger
2018-06-26 18:14       ` Roger
2018-06-26 18:38         ` gautier_niouzes
2018-06-27  2:11           ` Roger
2018-06-27  4:55             ` gautier_niouzes
2018-06-27  7:07               ` Roger
2018-06-27  7:28                 ` gautier_niouzes
2018-06-27  8:05                   ` Roger
2018-06-27  7:04           ` Dmitry A. Kazakov
2018-06-27  7:12             ` Roger
2018-06-27  9:59             ` gautier_niouzes
2018-06-27 12:34     ` Stephen Leake
2018-06-27 12:41       ` Roger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox