On Mon, Aug 10, 2015 at 8:27 PM, Bob Friesenhahn <bfrie...@simple.dallas.tx.us> wrote: > On Mon, 10 Aug 2015, Jakub Wilk wrote: >>> Perhaps this issue is due to g++ defaulting to a newer version of the C++ >>> standard and thus it requires a new C++ ABI? >> I don't think so. I'd rather blame: >> >> * Test build with QuantumDepth 16 (closes: #557879). >> >> But wait, isn't change of QuantumDepth an ABI breakage? >> SONAME of the non-C++ library didn't change; it's still >> /usr/lib/libGraphicsMagick.so.3. As I know it's only an internal precision change, but doesn't affect any method or function.
> If --enable-quantum-library-names was used as an option to the configure > script, then the shared library name would become like > libGraphicsMagick-Q16.so so the whole run-time library name is different. It was not used. Should I add this? It seems it would cause more trouble than win. > If the QuantumDepth 8 build did not use this option, then it would be named > as before and existing apps (compiled with QuantumDepth 8) should work with > it. This allows the libraries to co-exist. It seems you also write that the quantum depth change shouldn't be a problem for applications. > The package used for development needs to specify if it is for Q8 or Q16 > since (barring other factors), it is only possible to develop for one at a > time. As I know, GraphicsMagick will use roughly double the memory during image processing with the latter, but that's what the user can see (and that the output quality is better). Am I right? > Regardless, if GCC 5.X is now being used (is this the case?), I would > suspect that the C++ default ABI (and libraries) have changed (to C++ 11) > and this results in different name mangling. Note that the linker did find > the library but not the method. Yes, it's now compiled with GCC 5.2.x and the name mangling is changed for the C++ library. There are known regressions[1] between v4.9 and v5 , but I don't know too much details. While you are right in #795099 that the two libgraphicsmagick++ libraries are co-installable, but I fear that the two C++ ABIs would cause more problems. The reverse dependencies list is small, those can be re-compiled with the new library version. But to answer your question, the API for 1.3.21/QuantumDepth16 should be the same as previously. I attach the symbols change between 1.3.20 and 1.3.21 ; the additions are for WebP image support and two symbols (RegisterAVIImage, UnregisterAVIImage) are removed. As I see, a versioned breaks is the only thing I need to add. Regards, Laszlo/GCS [1] https://wiki.debian.org/GCC5#libstdc.2B-.2B-_c.2B-.2B-11_incompatibilities_.284.9_and_5.29
--- 1.3.20/debian/libgraphicsmagick3.symbols 2015-02-12 20:08:51.000000000 +0100 +++ 1.3.21/debian/libgraphicsmagick3.symbols 2015-08-08 17:48:44.521870457 +0200 @@ -75,6 +75,7 @@ ChannelThresholdImage@Base 1.3.5 ChannelTypeToString@Base 1.3.5 CharcoalImage@Base 1.3.5 + CheckImagePixelLimits@Base 1.3.21 ChopImage@Base 1.3.5 ClassTypeToString@Base 1.3.5 ClipImage@Base 1.3.5 @@ -504,6 +505,7 @@ LockSemaphoreInfo@Base 1.3.5 LogMagickEvent@Base 1.3.5 LogMagickEventList@Base 1.3.5 + LogPALMHeader@Base 1.3.21 MSBOrderLong@Base 1.3.5 MSBOrderShort@Base 1.3.5 MagickAllocFunctions@Base 1.3.5 @@ -570,6 +572,7 @@ MagickSetFileSystemBlockSize@Base 1.3.8 MagickSizeStrToInt64@Base 1.3.5 MagickSpawnVP@Base 1.3.5 + MagickStripSpacesFromString@Base 1.3.21 MagickStrlCat@Base 1.3.5 MagickStrlCpy@Base 1.3.5 MagickStrlCpyTrunc@Base 1.3.5 @@ -704,6 +707,7 @@ PSPageGeometry@Base 1.3.5 PackbitsEncode2Image@Base 1.3.5 PackbitsEncodeImage@Base 1.3.5 + PanicDestroyMagick@Base 1.3.21 PersistCache@Base 1.3.5 PingBlob@Base 1.3.5 PingImage@Base 1.3.5 @@ -719,6 +723,7 @@ PrependImageToList@Base 1.3.5 ProfileImage@Base 1.3.5 PurgeTemporaryFiles@Base 1.3.15 + PurgeTemporaryFilesAsyncSafe@Base 1.3.21 PushImagePixels@Base 1.3.5 QuantizeImage@Base 1.3.5 QuantizeImages@Base 1.3.5 @@ -764,7 +769,6 @@ ReferenceCache@Base 1.3.5 ReferenceImage@Base 1.3.5 RegisterARTImage@Base 1.3.5 - RegisterAVIImage@Base 1.3.5 RegisterAVSImage@Base 1.3.5 RegisterBMPImage@Base 1.3.5 RegisterCALSImage@Base 1.3.8 @@ -852,6 +856,7 @@ RegisterVIDImage@Base 1.3.5 RegisterVIFFImage@Base 1.3.5 RegisterWBMPImage@Base 1.3.5 + RegisterWEBPImage@Base 1.3.21 RegisterWMFImage@Base 1.3.5 RegisterWPGImage@Base 1.3.5 RegisterXBMImage@Base 1.3.5 @@ -899,6 +904,7 @@ SetImageColor@Base 1.3.15 SetImageColorRegion@Base 1.3.15 SetImageDepth@Base 1.3.5 + SetImageEx@Base 1.3.21 SetImageInfo@Base 1.3.5 SetImageOpacity@Base 1.3.5 SetImagePixels@Base 1.3.5 @@ -982,7 +988,6 @@ UnlockSemaphoreInfo@Base 1.3.5 UnmapBlob@Base 1.3.5 UnregisterARTImage@Base 1.3.5 - UnregisterAVIImage@Base 1.3.5 UnregisterAVSImage@Base 1.3.5 UnregisterBMPImage@Base 1.3.5 UnregisterCALSImage@Base 1.3.8 @@ -1070,6 +1075,7 @@ UnregisterVIDImage@Base 1.3.5 UnregisterVIFFImage@Base 1.3.5 UnregisterWBMPImage@Base 1.3.5 + UnregisterWEBPImage@Base 1.3.21 UnregisterWMFImage@Base 1.3.5 UnregisterWPGImage@Base 1.3.5 UnregisterXBMImage@Base 1.3.5