Устаревшие уведомления о сборке с использованием GTKMM с C++11

Я пытаюсь использовать GTKMM с проектом, который использует функции C++11. Проблема в том, что, по-видимому, C++11 устарел в некоторых частях языка, который, похоже, использует GTKMM.

Есть ли способ избавиться от этих сообщений, сохраняя при этом полезные предупреждения компилятора для моего кода?

Компилятор GCC 5.2 для Linux. Вот те уведомления, о которых я говорю:

In file included from /usr/include/glibmm-2.4/glibmm/wrap.h:23:0,
                 from /usr/include/glibmm-2.4/glibmm/containerhandle_shared.h:26,
                 from /usr/include/glibmm-2.4/glibmm/arrayhandle.h:23,
                 from /usr/include/glibmm-2.4/glibmm.h:91,
                 from /usr/include/gtkmm-3.0/gtkmm.h:87,
                 from test.cpp:1:
/usr/include/glibmm-2.4/glibmm/objectbase.h:215:13: warning: ‘template<class> class std::auto_ptr’ is deprecated [-Wdeprecated-declarations]
 static std::auto_ptr<Threads::Mutex> extra_object_base_data_mutex;
             ^
In file included from /usr/include/c++/5.2.0/memory:81:0,
                 from /usr/include/glibmm-2.4/glibmm/objectbase.h:32,
                 from /usr/include/glibmm-2.4/glibmm/wrap.h:23,
                 from /usr/include/glibmm-2.4/glibmm/containerhandle_shared.h:26,
                 from /usr/include/glibmm-2.4/glibmm/arrayhandle.h:23,
                 from /usr/include/glibmm-2.4/glibmm.h:91,
                 from /usr/include/gtkmm-3.0/gtkmm.h:87,
                 from test.cpp:1:
/usr/include/c++/5.2.0/bits/unique_ptr.h:49:28: note: declared here template<typename> class auto_ptr;

Если что-то не так с параметрами компилятора, вот CMakeLists (был повторно использован из проекта OpenCV, пожалуйста, сообщите, если в файле что-то не так):

cmake_minimum_required(VERSION 3.3.0 FATAL_ERROR)
list( APPEND CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS} -g -ftest-coverage -fprofile-arcs -libs")

project( interface )
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTKMM REQUIRED gtkmm-3.0)
include_directories(${GTKMM_INCLUDE_DIRS})
link_directories(${GTKMM_LIBRARY_DIRS})
add_definitions(${GTKMM_CFLAGS_OTHER})
add_executable( interface test.cpp )
target_link_libraries(interface ${GTKMM_LIBRARIES})

2 ответа

Решение

Просто грязный взлом (потому что, вероятно, использование auto_ptr внутри GTKMM сомнительно, поэтому вы хотите сообщить об ошибке в GTKMM); Вы можете использовать некоторые диагностические прагмы и заменить
#include <gtkmm.h> с

//untested code
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#include <gtkmm.h>
#pragma GCC diagnostic warning  "-Wdeprecated-declarations"

Но auto_ptr действительно не рекомендуется в C++11, и я не уверен, что он хорошо сочетается с вашей стандартной библиотекой C++11. (Возможно, было бы целесообразно использовать Qt5 вместо GtkMM, поскольку GtkMM может не сохраняться долго, однако, похоже, он знает эту проблему; в противном случае надеемся и, возможно, поспособствуем улучшению GtkMM).

Вы, вероятно, также должны использовать valgrind в своих тестах

Мы исправили это в glibmm совсем недавно: https://bugzilla.gnome.org/show_bug.cgi?id=748630

Поэтому лучший способ исправить это для вашей сборки - это обновить версии glibmm и gtkmm, когда это возможно.

Другие вопросы по тегам