GNOME Bugzilla – Bug 746760
Qt GStreamer compilation breaks with Xcode6 compiler - wrong headers
Last modified: 2018-05-04 13:15:23 UTC
Hi All, I'm on OS X 10.10.1 I've Qt5.4.1 with path ~/Qt5.4.1/5.4/clang_64. I've downloaded qt-gstreamer-1.2 tarball from here: http://gstreamer.freedesktop.org/src/qt-gstreamer/ All dependencies are installed with Homebrew Trying to build and install qt-gstreamer-1.2 with the commands below I get erros (log is attached at the end): cmake .. -DQT_VERSION=5 -DCMAKE_PREFIX_PATH=~/Qt5.4.1/5.4/clang_64/ make The first one comes from unknown type name of QTGLIB_EXPORT. But is not the source of the problem. The second one comes from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/ that is Xcode headers directory. The error is: no member named 'find_first_of' in namespace 'std::__1'. It seems like Xcode use libstdc++ by default instead of libc++. I tried to change compiler adding the flags below but it doesn't works, same errors: -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ I tried to force Xcode to use libc++ adding the flag below but it doesn't works, same errors : -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS -stdlib=libc++" Then I tried to use other headers Library adding the flag below but it doesn't works: -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -I/usr/include/c++/4.2.1/" Finally what solve my problem is to use ordinary clang Library adding this flag: -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -I/Library/Developer/CommandLineTools/usr/include/c++/v1" Apparently there have been some changes in Xcode headers. Do you know how to force Xcode to use good headers (i.e. libc++ instead of libstdc++) from cmake? Best Regards, Manuel Imperiale Compilation errors log: Last login: Wed Mar 25 03:19:14 on ttys000 manous-MBP:build manou$ cmake .. -DQT_VERSION=5 -DCMAKE_PREFIX_PATH=~/Qt5.4.1/5.4/clang_64 -- The C compiler identification is AppleClang 6.0.0.6000057 -- The CXX compiler identification is AppleClang 6.0.0.6000057 -- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Using Qt5 (min: 5.0.0) -- Found Qt4or5: 1 found components: Core Gui Widgets OpenGL Quick1 Quick2 Qml Test -- Boost version: 1.57.0 -- Found PkgConfig: /usr/local/bin/pkg-config (found version "0.28") -- checking for module 'gstreamer-1.0' -- found gstreamer-1.0, version 1.4.5 -- checking for module 'gstreamer-base-1.0' -- found gstreamer-base-1.0, version 1.4.5 -- Found GSTREAMER_BASE_LIBRARY: /usr/local/Cellar/gstreamer/1.4.5/lib/libgstbase-1.0.dylib -- Found GSTREAMER_BASE_INCLUDE_DIR: /usr/local/Cellar/gstreamer/1.4.5/include/gstreamer-1.0 -- Found GStreamer: /usr/local/Cellar/gstreamer/1.4.5/lib/libgstreamer-1.0.dylib (Required is at least version "1.0.0") -- checking for module 'gstreamer-plugins-base-1.0' -- found gstreamer-plugins-base-1.0, version 1.4.5 -- checking for module 'gstreamer-app-1.0' -- found gstreamer-app-1.0, version 1.4.5 -- Found GSTREAMER_APP_LIBRARY: /usr/local/Cellar/gst-plugins-base/1.4.5/lib/libgstapp-1.0.dylib -- Found GSTREAMER_APP_INCLUDE_DIR: /usr/local/Cellar/gst-plugins-base/1.4.5/include/gstreamer-1.0 -- checking for module 'gstreamer-audio-1.0' -- found gstreamer-audio-1.0, version 1.4.5 -- Found GSTREAMER_AUDIO_LIBRARY: /usr/local/Cellar/gst-plugins-base/1.4.5/lib/libgstaudio-1.0.dylib -- Found GSTREAMER_AUDIO_INCLUDE_DIR: /usr/local/Cellar/gst-plugins-base/1.4.5/include/gstreamer-1.0 -- checking for module 'gstreamer-video-1.0' -- found gstreamer-video-1.0, version 1.4.5 -- Found GSTREAMER_VIDEO_LIBRARY: /usr/local/Cellar/gst-plugins-base/1.4.5/lib/libgstvideo-1.0.dylib -- Found GSTREAMER_VIDEO_INCLUDE_DIR: /usr/local/Cellar/gst-plugins-base/1.4.5/include/gstreamer-1.0 -- checking for module 'gstreamer-pbutils-1.0' -- found gstreamer-pbutils-1.0, version 1.4.5 -- Found GSTREAMER_PBUTILS_LIBRARY: /usr/local/Cellar/gst-plugins-base/1.4.5/lib/libgstpbutils-1.0.dylib -- Found GSTREAMER_PBUTILS_INCLUDE_DIR: /usr/local/Cellar/gst-plugins-base/1.4.5/include/gstreamer-1.0 -- Found GStreamerPluginsBase: TRUE (Required is at least version "1.0.0") -- checking for module 'glib-2.0' -- found glib-2.0, version 2.42.2 -- Found GLIB2: /usr/local/Cellar/glib/2.42.2/lib/libglib-2.0.dylib -- checking for module 'gobject-2.0' -- found gobject-2.0, version 2.42.2 -- Found GObject: /usr/local/Cellar/glib/2.42.2/include/glib-2.0 -- Performing Test USE_OPENGLES -- Performing Test USE_OPENGLES - Failed -- Found OpenGL: /System/Library/Frameworks/OpenGL.framework CMake Warning (dev) at examples/CMakeLists.txt:13 (get_target_property): Policy CMP0045 is not set: Error on non-existent target in get_target_property. Run "cmake --help-policy CMP0045" for policy details. Use the cmake_policy command to set the policy and suppress this warning. get_target_property() called with non-existent target "examples_distcheck". Call Stack (most recent call first): examples/CMakeLists.txt:22 (example_distcheck) This warning is for project developers. Use -Wno-dev to suppress it. -- Found Doxygen: /usr/local/bin/doxygen (found version "1.8.9.1") -- Found DOXYFILE_IN: /Users/manou/soundLab/qt-gstreamer-1.2.0/Doxyfile.in CMake Warning (dev) at cmake/modules/UseDoxygen.cmake:102 (get_target_property): Policy CMP0045 is not set: Error on non-existent target in get_target_property. Run "cmake --help-policy CMP0045" for policy details. Use the cmake_policy command to set the policy and suppress this warning. get_target_property() called with non-existent target "doc". Call Stack (most recent call first): CMakeLists.txt:215 (include) This warning is for project developers. Use -Wno-dev to suppress it. ----------------------------------------------------------------------------- -- The following external packages were located on your system. -- This installation will have the extra features provided by these packages. ----------------------------------------------------------------------------- * Qt - Required for building everything * QtOpenGL - Required for OpenGL acceleration in qtvideosink and QtGStreamerUi * QtQuick1 (QtDeclarative) - Required for building QtQuick1 support * QtQuick2 (QtQuick) - Required for building QtQuick2 support * QtQml - Required for building QtQuick2 support * Boost - Required for building QtGLib * GStreamer - Required to build QtGStreamer * GStreamer base library - Used for building the qt5videosink element * GStreamer app library - Required to build QtGStreamerUtils * GStreamer audio library - Required to build QtGStreamer * GStreamer video library - Required to build QtGStreamer * GStreamer pbutils library - Used for building the Discoverer API * GLib - Required to build QtGLib * GObject - Required to build QtGLib * OpenGL - Required for OpenGL rendering support in qt5videosink * Doxygen - Used to generate the API documentation ----------------------------------------------------------------------------- -- Congratulations! All external packages have been found. ----------------------------------------------------------------------------- -- Configuring done CMake Warning (dev): Policy CMP0042 is not set: MACOSX_RPATH is enabled by default. Run "cmake --help-policy CMP0042" for policy details. Use the cmake_policy command to set the policy and suppress this warning. MACOSX_RPATH is not specified for the following targets: Qt5GLib Qt5GStreamer Qt5GStreamerQuick Qt5GStreamerUi Qt5GStreamerUtils This warning is for project developers. Use -Wno-dev to suppress it. -- Generating done -- Build files have been written to: /Users/manou/soundLab/qt-gstreamer-1.2.0/build manous-MBP:build manou$ make Scanning dependencies of target Qt5GLib_automoc [ 1%] Automatic moc for target Qt5GLib Generating connect.moc [ 1%] Built target Qt5GLib_automoc [ 1%] Copying gen.cpp to the build directory Scanning dependencies of target Qt5GLib [ 2%] Building CXX object src/QGlib/CMakeFiles/Qt5GLib.dir/quark.cpp.o [ 3%] Building CXX object src/QGlib/CMakeFiles/Qt5GLib.dir/type.cpp.o [ 4%] Building CXX object src/QGlib/CMakeFiles/Qt5GLib.dir/paramspec.cpp.o [ 5%] Building CXX object src/QGlib/CMakeFiles/Qt5GLib.dir/object.cpp.o [ 5%] Building CXX object src/QGlib/CMakeFiles/Qt5GLib.dir/value.cpp.o /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGlib/value.cpp:60:5: warning: 'g_value_get_char' is deprecated [-Wdeprecated-declarations] DECLARE_VTABLE(char, char, Type::Char) ^ /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGlib/value.cpp:50:43: note: expanded from macro 'DECLARE_VTABLE' *reinterpret_cast<T*>(data) = g_value_get_##NICK(value); \ ^ <scratch space>:5:1: note: expanded from here g_value_get_char ^ /usr/local/Cellar/glib/2.42.2/include/glib-2.0/gobject/gvaluetypes.h:182:23: note: 'g_value_get_char' has been explicitly marked deprecated here gchar g_value_get_char (const GValue *value); ^ /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGlib/value.cpp:60:5: warning: 'g_value_set_char' is deprecated [-Wdeprecated-declarations] DECLARE_VTABLE(char, char, Type::Char) ^ /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGlib/value.cpp:55:13: note: expanded from macro 'DECLARE_VTABLE' g_value_set_##NICK(value, *reinterpret_cast<T const *>(data)); \ ^ <scratch space>:6:1: note: expanded from here g_value_set_char ^ /usr/local/Cellar/glib/2.42.2/include/glib-2.0/gobject/gvaluetypes.h:179:23: note: 'g_value_set_char' has been explicitly marked deprecated here void g_value_set_char (GValue *value, ^ 2 warnings generated. [ 6%] Building CXX object src/QGlib/CMakeFiles/Qt5GLib.dir/signal.cpp.o [ 7%] Building CXX object src/QGlib/CMakeFiles/Qt5GLib.dir/error.cpp.o [ 8%] Building CXX object src/QGlib/CMakeFiles/Qt5GLib.dir/connect.cpp.o /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGlib/connect.cpp:76:13: warning: expression result unused [-Wunused-value] dynamic_cast<const InvalidTypeException &>(e); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGlib/connect.cpp:82:17: warning: expression result unused [-Wunused-value] dynamic_cast<const InvalidValueException &>(e); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 warnings generated. [ 9%] Building CXX object src/QGlib/CMakeFiles/Qt5GLib.dir/wrap.cpp.o [ 10%] Building CXX object src/QGlib/CMakeFiles/Qt5GLib.dir/init.cpp.o /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGlib/init.cpp:29:5: warning: 'g_type_init' is deprecated [-Wdeprecated-declarations] g_type_init(); ^ /usr/local/Cellar/glib/2.42.2/include/glib-2.0/gobject/gtype.h:679:23: note: 'g_type_init' has been explicitly marked deprecated here void g_type_init (void); ^ 1 warning generated. [ 10%] Building CXX object src/QGlib/CMakeFiles/Qt5GLib.dir/gen.cpp.o [ 11%] Building CXX object src/QGlib/CMakeFiles/Qt5GLib.dir/Qt5GLib_automoc.cpp.o Linking CXX shared library libQt5GLib-2.0.dylib [ 11%] Built target Qt5GLib Scanning dependencies of target Qt5GStreamer_automoc [ 12%] Automatic moc for target Qt5GStreamer [ 12%] Built target Qt5GStreamer_automoc [ 13%] Copying gen.cpp to the build directory Scanning dependencies of target Qt5GStreamer [ 14%] Building CXX object src/QGst/CMakeFiles/Qt5GStreamer.dir/init.cpp.o In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/init.cpp:17: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/init.h:20: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/global.h:25: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/../QGlib/type.h:22: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/../QGlib/global.h:25: In file included from /Users/manou/Qt5.4.1/5.4/clang_64/lib/QtCore.framework/Headers/QtGlobal:1: In file included from /Users/manou/Qt5.4.1/5.4/clang_64/lib/QtCore.framework/Headers/qglobal.h:81: In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:627: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/memory:1: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/memory.h:21: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/miniobject.h:21: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/../QGlib/refpointer.h:24: /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/../QGlib/wrap.h:37:1: error: unknown type name 'QTGLIB_EXPORT' QTGLIB_EXPORT RefCountedObject *constructWrapper(Type instanceType, void *instance); ^ /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/../QGlib/wrap.h:37:31: error: expected ';' after top level declarator QTGLIB_EXPORT RefCountedObject *constructWrapper(Type instanceType, void *instance); ^ /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/../QGlib/wrap.h:69:1: error: unknown type name 'QTGLIB_EXPORT' QTGLIB_EXPORT RefCountedObject *wrapObject(void *gobject); ^ /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/../QGlib/wrap.h:69:31: error: expected ';' after top level declarator QTGLIB_EXPORT RefCountedObject *wrapObject(void *gobject); ^ /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/../QGlib/wrap.h:70:1: error: unknown type name 'QTGLIB_EXPORT' QTGLIB_EXPORT RefCountedObject *wrapParamSpec(void *param); ^ /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/../QGlib/wrap.h:70:31: error: expected ';' after top level declarator QTGLIB_EXPORT RefCountedObject *wrapParamSpec(void *param); ^ /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/../QGlib/wrap.h:71:1: error: unknown type name 'QTGLIB_EXPORT' QTGLIB_EXPORT RefCountedObject *wrapInterface(Type interfaceType, void *gobject); ^ /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/../QGlib/wrap.h:71:31: error: expected ';' after top level declarator QTGLIB_EXPORT RefCountedObject *wrapInterface(Type interfaceType, void *gobject); ^ In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/init.cpp:17: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/init.h:20: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/global.h:25: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/../QGlib/type.h:22: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/../QGlib/global.h:25: In file included from /Users/manou/Qt5.4.1/5.4/clang_64/lib/QtCore.framework/Headers/QtGlobal:1: In file included from /Users/manou/Qt5.4.1/5.4/clang_64/lib/QtCore.framework/Headers/qglobal.h:81: In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:627: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/memory:1: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/memory.h:21: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/miniobject.h:21: In file included from /Users/manou/soundLab/qt-gstreamer-1.2.0/src/QGst/../QGlib/refpointer.h:26: In file included from /usr/local/include/boost/type_traits.hpp:49: In file included from /usr/local/include/boost/type_traits/is_complex.hpp:12: In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/complex:247: In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/sstream:174: In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/ostream:131: In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/ios:216: In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/__locale:15: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:999:32: error: no member named 'find_first_of' in namespace 'std::__1'; did you mean '__find_first_of'? const _CharT* __r = _VSTD::find_first_of ~~~~~~~^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:994:34: note: '__find_first_of' declared here _SizeT _LIBCPP_INLINE_VISIBILITY __find_first_of(const _CharT *__p, _SizeT __sz, ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1090:12: error: use of undeclared identifier '__murmur2_or_cityhash' return __murmur2_or_cityhash<size_t>()(__p, (__e-__p)*sizeof(value_type)); ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1090:34: error: unexpected type name 'size_t': expected expression return __murmur2_or_cityhash<size_t>()(__p, (__e-__p)*sizeof(value_type)); ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1090:42: error: expected expression return __murmur2_or_cityhash<size_t>()(__p, (__e-__p)*sizeof(value_type)); ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1179:13: error: unknown type name 'allocator_traits' typedef allocator_traits<allocator_type> __alloc_traits; ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1179:29: error: expected member name or ';' after declaration specifiers typedef allocator_traits<allocator_type> __alloc_traits; ~~~~~~~~~~~~~~~~~~~~~~~~^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1180:22: error: use of undeclared identifier '__alloc_traits' typedef typename __alloc_traits::size_type size_type; ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1180:38: error: expected a qualified name after 'typename' typedef typename __alloc_traits::size_type size_type; ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1180:47: error: expected ';' at end of declaration list typedef typename __alloc_traits::size_type size_type; ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1181:22: error: use of undeclared identifier '__alloc_traits' typedef typename __alloc_traits::difference_type difference_type; ^ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1181:38: error: expected a qualified name after 'typename' typedef typename __alloc_traits::difference_type difference_type; ^ fatal error: too many errors emitted, stopping now [-ferror-limit=] 20 errors generated. make[2]: *** [src/QGst/CMakeFiles/Qt5GStreamer.dir/init.cpp.o] Error 1 make[1]: *** [src/QGst/CMakeFiles/Qt5GStreamer.dir/all] Error 2 make: *** [all] Error 2
Does this still happen with current xcode and qt-gstreamer ?
Thank you for filing this report. There are a couple of fixes in git for clang and newer boost. If you still want to use qt-gstreamer, you may want to try using the version from git. Do note, though, that it is unmaintained.