GNOME Bugzilla – Bug 516511
gstapev2mux.cc taglib build failure on Solaris with Sun C++
Last modified: 2010-06-26 19:28:33 UTC
I'm building gst-plugins-good from CVS on x86_64-sun-solaris2.10 with the Sun Workshop 12 C and C++ compilers. After I work around the issue I reported in bug # 516509 using "make ERROR_CFLAGS=" in ext/taglib, the compile proceeds to gstapev2mux.cc, where I encounter the following errors: /bin/bash ../../libtool --tag=CXX --mode=compile CC -DHAVE_CONFIG_H -I. -I../.. -I/local/include/X11 -I/local/include -I/local/gnu/include/X11 -I/local/gnu/include -D_REENTRANT -D_PTHREADS -I/local/gnu/include/gstreamer-0.10 -I/local/gnu/include/glib-2.0 -I/local/gnu/lib/64/glib-2.0/include -I/local/gnu/include/libxml2 -I../../gst-libs -I../../gst-libs -D_REENTRANT -D_PTHREADS -I/local/gnu/include/gstreamer-0.10 -I/local/gnu/include/glib-2.0 -I/local/gnu/lib/64/glib-2.0/include -I/local/gnu/include/libxml2 -g -I/local/include/taglib -xO2 -library=stlport4 -library=Crun -D__func__=\"unknown\" -KPIC -m64 -xtarget=native -xarch=native -c -o libgsttaglib_la-gstapev2mux.lo `test -f 'gstapev2mux.cc' || echo './'`gstapev2mux.cc CC -DHAVE_CONFIG_H -I. -I../.. -I/local/include/X11 -I/local/include -I/local/gnu/include/X11 -I/local/gnu/include -D_REENTRANT -D_PTHREADS -I/local/gnu/include/gstreamer-0.10 -I/local/gnu/include/glib-2.0 -I/local/gnu/lib/64/glib-2.0/include -I/local/gnu/include/libxml2 -I../../gst-libs -I../../gst-libs -D_REENTRANT -D_PTHREADS -I/local/gnu/include/gstreamer-0.10 -I/local/gnu/include/glib-2.0 -I/local/gnu/lib/64/glib-2.0/include -I/local/gnu/include/libxml2 -g -I/local/include/taglib -xO2 -library=stlport4 -library=Crun -D__func__=\"unknown\" -KPIC -m64 -xtarget=native -xarch=native -c gstapev2mux.cc -DPIC "gstapev2mux.cc", line 73: Warning (Anachronism): Formal argument base_init of type extern "C" void(*)(void*) in call to gst_type_register_static_full(unsigned long, const char*, unsigned, extern "C" void(*)(void*), extern "C" void(*)(void*), extern "C" void(*)(void*,void*), extern "C" void(*)(void*,void*), const void*, unsigned, unsigned short, extern "C" void(*)(_GTypeInstance*,void*), const _GTypeValueTable*, GTypeFlags) is being passed void(*)(void*). "gstapev2mux.cc", line 73: Warning (Anachronism): Formal argument class_init of type extern "C" void(*)(void*,void*) in call to gst_type_register_static_full(unsigned long, const char*, unsigned, extern "C" void(*)(void*), extern "C" void(*)(void*), extern "C" void(*)(void*,void*), extern "C" void(*)(void*,void*), const void*, unsigned, unsigned short, extern "C" void(*)(_GTypeInstance*,void*), const _GTypeValueTable*, GTypeFlags) is being passed void(*)(void*,void*). "gstapev2mux.cc", line 98: Warning (Anachronism): Assigning _GstBuffer*(*)(_GstTagLibMux*,_GstStructure*) to extern "C" _GstBuffer*(*)(_GstTagLibMux*,_GstStructure*). "gstapev2mux.cc", line 123: Error: Could not find a match for TagLib::String::String(char*, TagLib::String::Type) needed in add_one_tag(const _GstStructure*, const char*, void*). "gstapev2mux.cc", line 123: Error: Formal argument s of type const TagLib::String& in call to TagLib::APE::Tag::setTitle(const TagLib::String&) is being passed int. "gstapev2mux.cc", line 132: Error: Could not find a match for TagLib::String::String(char*, TagLib::String::Type) needed in add_one_tag(const _GstStructure*, const char*, void*). "gstapev2mux.cc", line 132: Error: Formal argument s of type const TagLib::String& in call to TagLib::APE::Tag::setAlbum(const TagLib::String&) is being passed int. "gstapev2mux.cc", line 141: Error: Could not find a match for TagLib::String::String(char*, TagLib::String::Type) needed in add_one_tag(const _GstStructure*, const char*, void*). "gstapev2mux.cc", line 141: Error: Formal argument s of type const TagLib::String& in call to TagLib::APE::Tag::setArtist(const TagLib::String&) is being passed int. "gstapev2mux.cc", line 150: Error: Could not find a match for TagLib::String::String(const char[9], TagLib::String::Type) needed in add_one_tag(const _GstStructure*, const char*, void*). "gstapev2mux.cc", line 150: Error: Formal argument key of type const TagLib::String& in call to TagLib::APE::Tag::addValue(const TagLib::String&, const TagLib::String&, bool) is being passed int. "gstapev2mux.cc", line 151: Error: Could not find a match for TagLib::String::String(char*, TagLib::String::Type) needed in add_one_tag(const _GstStructure*, const char*, void*). "gstapev2mux.cc", line 151: Error: Formal argument value of type const TagLib::String& in call to TagLib::APE::Tag::addValue(const TagLib::String&, const TagLib::String&, bool) is being passed int. "gstapev2mux.cc", line 160: Error: Could not find a match for TagLib::String::String(char*, TagLib::String::Type) needed in add_one_tag(const _GstStructure*, const char*, void*). "gstapev2mux.cc", line 160: Error: Formal argument s of type const TagLib::String& in call to TagLib::APE::Tag::setGenre(const TagLib::String&) is being passed int. "gstapev2mux.cc", line 169: Error: Could not find a match for TagLib::String::String(char*, TagLib::String::Type) needed in add_one_tag(const _GstStructure*, const char*, void*). "gstapev2mux.cc", line 169: Error: Formal argument s of type const TagLib::String& in call to TagLib::APE::Tag::setComment(const TagLib::String&) is being passed int. "gstapev2mux.cc", line 198: Error: Could not find a match for TagLib::String::String(const char[6], TagLib::String::Type) needed in add_one_tag(const _GstStructure*, const char*, void*). "gstapev2mux.cc", line 198: Error: Formal argument key of type const TagLib::String& in call to TagLib::APE::Tag::addValue(const TagLib::String&, const TagLib::String&, bool) is being passed int. "gstapev2mux.cc", line 199: Error: Could not find a match for TagLib::String::String(char*, TagLib::String::Type) needed in add_one_tag(const _GstStructure*, const char*, void*). "gstapev2mux.cc", line 199: Error: Formal argument value of type const TagLib::String& in call to TagLib::APE::Tag::addValue(const TagLib::String&, const TagLib::String&, bool) is being passed int. "gstapev2mux.cc", line 216: Error: Could not find a match for TagLib::String::String(const char[6], TagLib::String::Type) needed in add_one_tag(const _GstStructure*, const char*, void*). "gstapev2mux.cc", line 216: Error: Formal argument key of type const TagLib::String& in call to TagLib::APE::Tag::addValue(const TagLib::String&, const TagLib::String&, bool) is being passed int. "gstapev2mux.cc", line 217: Error: Could not find a match for TagLib::String::String(char*, TagLib::String::Type) needed in add_one_tag(const _GstStructure*, const char*, void*). "gstapev2mux.cc", line 217: Error: Formal argument value of type const TagLib::String& in call to TagLib::APE::Tag::addValue(const TagLib::String&, const TagLib::String&, bool) is being passed int. "gstapev2mux.cc", line 269: Error: Could not find a match for TagLib::String::String(const char[10], TagLib::String::Type) needed in add_one_tag(const _GstStructure*, const char*, void*). "gstapev2mux.cc", line 269: Error: Formal argument key of type const TagLib::String& in call to TagLib::APE::Tag::addValue(const TagLib::String&, const TagLib::String&, bool) is being passed int. "gstapev2mux.cc", line 270: Error: Could not find a match for TagLib::String::String(char*, TagLib::String::Type) needed in add_one_tag(const _GstStructure*, const char*, void*). Compilation aborted, too many Error messages. gmake: *** [libgsttaglib_la-gstapev2mux.lo] Error 1 I have taglib 1.5b1 installed. My C is OK, but I'm afraid my C++ is weak, so although I know in principle what the compiler is saying, I don't know what the right approach to fixing it is. I'm willing to do some experimentation, if someone can point me in a suggested direction.
This is a bit curious. I wonder why it complains about the code in gstapev2mux.cc but not the code in gstid3v2mux.cc which is (as far as I can see) exactly the same. Anyway, could you try putting an extern "C" { ... } around the boilerplate macro, so that it looks like: extern "C" { GST_BOILERPLATE (GstApev2Mux, gst_apev2_mux, GstTagLibMux, GST_TYPE_TAG_LIB_MUX); } (but then again, I don't get why this works just fine for id3v2mux.cc).
I just tried that, and unfortunately it didn't make any difference. We still get all the same error messages from the compiler as before, plus a couple new warnings.
Looking at the errors some more, I think the errors we want to pay attention to are the *second* error that appears for each line number, about "Formal argument". For example: "gstapev2mux.cc", line 127: Error: Formal argument s of type const TagLib::String& in call to TagLib::APE::Tag::setTitle(const TagLib::String&) is being passed int. If I'm groking the compiler correctly, that means that in this call apev2tag->setTitle (String::String (title, String::UTF8)); the "String::String (title, String::UTF8)" results in something of type int, not type const TagLib::String&. That still doesn't tell me why it's happening, but I think that's where we should focus.
Let's keep it open then :)
Does this still happen with the latest release or git? (There was something messed up with the flags passed to the C++ compiler, but I don't remember the details right now). Brian: did you ever run into this? Any idea what's going on here?
I just tested building the SUNWgnome-media.spec file using the SS12 compiler and the taglib plugin in gst-plugins-good builds fine for me. I did have to make some fixes to the spec-files to build that taglib plugin, but this was to fix some issues with our spec-file and not an issue with the code. These fixes are in spec-files SVN head. So, if the bug submitter uses the latest Sun Studio 12 compiler, and ensures that they build GStreamer the same way as we do in the spec-file, it should work. http://src.opensolaris.org/source/xref/jds/spec-files/trunk/ Note the files specs/SUNWgnome-media.spec file which is the top-level spec-file. It references the base-specs/gst.spec, base-specs/gst-plugins-base.spec and base-specs/gst-plugins-good.spec files. These spec-files also references several patches in the patches subdirectory which all have names "gst*.diff". The fixes I made to the above spec-files to make the taglib plugin build if taglib is installed are already upstream so they can be viewed via the above URL. So, I do not think this is a bug. Note that building GStreamer is a bit picky about setting up the environment and configure options properly, so building the same way as we do using these spec-files should work better.
Hm. Closing as NOTABUG as per last comment then... But please feel free to reopen.