Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#59932 closed defect (fixed)

exiv2 @0.27.1: error: no matching function for call to 'binaryToString'

Reported by: TheLastLovemark Owned by: ryandesign (Ryan Carsten Schmidt)
Priority: Normal Milestone:
Component: ports Version: 2.6.2
Keywords: Cc: NicosPavlov
Port: exiv2

Description

Hi,

I just upgraded to MP 2.6.2, and while trying to install libkdcraw with variants +doc +debug, exiv2 failed. I cleaned both ports and tried to install exiv2 independently with variants +debug and +universal. This failed as well.

Attached is the main.log file for the second try at exiv2.

Attachments (1)

exiv2_main.log (189.4 KB) - added by TheLastLovemark 4 years ago.
exiv2 main log file

Download all attachments as: .zip

Change History (11)

Changed 4 years ago by TheLastLovemark

Attachment: exiv2_main.log added

exiv2 main log file

comment:1 Changed 4 years ago by mf2k (Frank Schima)

Keywords: exiv2 removed

comment:2 Changed 4 years ago by ryandesign (Ryan Carsten Schmidt)

Summary: exiv2 fails to build while building libkdcrawexiv2 @0.27.1: error: no matching function for call to 'binaryToString'

The log says:

:info:build /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_graphics_exiv2/exiv2/work/exiv2-0.27.1/src/pngimage.cpp:348:42: error: no matching function for call to 'binaryToString'
:info:build                             std::cerr << Exiv2::Internal::binaryToString(parsedBuf.pData_, parsedBuf.size_>50?50:parsedBuf.size_,0) << std::endl;
:info:build                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:info:build /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_graphics_exiv2/exiv2/work/exiv2-0.27.1/src/image_int.hpp:125:36: note: candidate function template not viable: requires single argument 'sl', but 3 arguments were provided
:info:build     inline binaryToStringHelper<T> binaryToString(const Slice<T> sl) throw()
:info:build                                    ^
:info:build 1 error generated.

I'm not sure why that would happen.

I see that you are trying to build with the +universal variant, which is not the default but which should work; it did work for me on my 10.13 machine. I see you're also using the non-default +debug variant.

Maybe you have another incompatible version of exiv2 or some other incompatible software installed somewhere. Does the problem remain if you sudo port clean exiv2 and try again using trace mode: sudo port -t install --unrequested exiv2 +debug +universal?

Of course, if you don't actually need the +debug or +universal variants, don't use them. In that case, you should receive a precompiled binary from our servers and would not need to compile it at all.

comment:3 Changed 4 years ago by kencu (Ken)

I should say that we found an error / interaction between gimp2 and exiv2 #58017 that looked to be likely to be due to an ABI conflict, resulting in a pointer being freed was not allocated error.

It was resolved by building everything (gimp2, exiv2) against libc++ in that case, but there is something touchy about the interaction between gimp2 and exiv2.

It is possible for certain software to transfer objects from one owner to another owner in c++, and my first guess is that is what was happening there.

Last edited 4 years ago by ryandesign (Ryan Carsten Schmidt) (previous) (diff)

comment:4 Changed 4 years ago by kencu (Ken)

Well, the above comment was in fact more relevant to 58407; I was reading them both around the same time.

comment:5 Changed 4 years ago by TheLastLovemark

gimp2 not installed.

debug is not mandatory, but I am still learning and want to be able to debug. especially because I do a lot of raw dslr photo shooting and i'm trying to learn raw dslr video processing also.

comment:6 Changed 4 years ago by ryandesign (Ryan Carsten Schmidt)

The code that raises the error is:

#if DEBUG
                            std::cerr << Exiv2::Internal::binaryToString(parsedBuf.pData_, parsedBuf.size_>50?50:parsedBuf.size_,0) << std::endl;
#endif

So I think you've simply found a bug in the exiv2 code that only appears when compiling in debug mode (this call of Exiv2::Internal::binaryToString (in src/pngimage.cpp) does not agree with that function's definition (in image_int.hpp)) and should report it to the developers of exiv2 so that they can fix it for the next version.

comment:7 in reply to:  6 Changed 4 years ago by ryandesign (Ryan Carsten Schmidt)

I have reported it upstream here: https://github.com/Exiv2/exiv2/issues/1082

comment:8 Changed 4 years ago by TheLastLovemark

Any updates on this one? The list of ports to reinstall grows because of dependency on exiv2

comment:9 Changed 4 years ago by ryandesign (Ryan Carsten Schmidt)

Owner: set to ryandesign
Resolution: fixed
Status: newclosed

In ec44b76bfe0ea31d095a1aa71bf5778df9ae258e/macports-ports (master):

exiv2: Update to 0.27.2

And take over as maintainer.

Closes: #59932

comment:10 Changed 4 years ago by ryandesign (Ryan Carsten Schmidt)

In ec44b76bfe0ea31d095a1aa71bf5778df9ae258e/macports-ports (dar, master, py38-reproject, revert-6945-rust-1.43.0, wireshark):

exiv2: Update to 0.27.2

And take over as maintainer.

Closes: #59932

Note: See TracTickets for help on using tickets.