From: Roger <rogermc@grapevine.com.au>
Subject: Problem Building Ada Interface To ImageMagick 7
Date: Tue, 26 Jun 2018 01:28:56 -0700 (PDT)
Date: 2018-06-26T01:28:56-07:00 [thread overview]
Message-ID: <f4c544c8-bbdf-48da-a27a-7611b880537d@googlegroups.com> (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.
next reply other threads:[~2018-06-26 8:28 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-26 8:28 Roger [this message]
2018-06-26 9:26 ` Problem Building Ada Interface To ImageMagick 7 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
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox