소스에서 컴파일할 때 glib-2.35.x 'g type_init is deprecated' 오류를 수정하는 방법

소스에서 컴파일할 때 glib-2.35.x 'g type_init is deprecated' 오류를 수정하는 방법

안녕하세요. 소스에서 gnome-packagekit을 컴파일하려고 하는데 git://git.gnome.org/gnome-packagekitmake의 오류가 발생합니다.

error: ‘g_type_init’ is deprecated (declared at /usr/local/include/glib-2.0/gobject/gtype.h:669) [-Werror=deprecated-declarations]
cc1: all warnings being treated as errors

나는 이것을 찾아보았는데 glib-2.35.4가 호출을 더 이상 사용하지 않기 때문인 것 같습니다 g_type_init. (실제로 그게 무슨 뜻인지는 모르겠습니다.) wperror일부 평론가들에 따르면 이는 수표와도 관련이 있는 것으로 보인다 . 의 출력은 autogen.sh다음과 같습니다

            gnome-packagekit 3.7.6
          =============================

prefix:                    /usr/local
compiler:                  gcc
cflags:                    -g -O2
cppflags:                   -Werror -Wall -Wreturn-type -Wdeclaration-after-statement -Wno-uninitialized -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Winline -Wformat-nonliteral -Wformat-security -Wswitch-default -Winit-self -Wmissing-include-dirs -Wno-strict-aliasing -Wundef -Waggregate-return -Wmissing-format-attribute -g -fexceptions                    gnome-packagekit 3.7.6
              =============================

    prefix:                    /usr/local
    compiler:                  gcc
    cflags:                    -g -O2
    cppflags:                   -Werror -Wall -Wreturn-type -Wdeclaration-after-statement -Wno-uninitialized -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Winline -Wformat-nonliteral -Wformat-security -Wswitch-default -Winit-self -Wmissing-include-dirs -Wno-strict-aliasing -Wundef -Waggregate-return -Wmissing-format-attribute -g -fexceptions

이는 이것이 그것과 관련이 있을 수 있음을 시사합니다.

glib컴파일러에게 이전 버전을 사용 하거나 검사를 무시하도록 지시하는 쉬운 방법이 있는지 궁금합니다 werror.

답변1

(사실 무슨 뜻인지는 모르겠습니다)

의미는 glib 버전 2.35.0부터 g_type_init 함수를 더 이상 사용해서는 안 된다는 것입니다. 향후 어느 시점에 라이브러리에서 함수를 제거하려는 의도이기 때문입니다.

따라서 glib 버전 2.35.0 이상에 대해 이전 glib 프로그램을 컴파일할 때 g_type_init 주위에 테스트를 추가하도록 코드를 편집해야 합니다.

#if !GLIB_CHECK_VERSION(2,35,0)
g_type_init ();
#endif

처음에는 g_type_init가 glib 2.35.0에서만 제외되는 것처럼 보이지만 실제로 LIB_CHECK_VERSION 매크로는 지정된 버전과 같거나 그 이상/최신 버전에 대해 true를 반환하도록 정의되어 있습니다.

컴파일러에게 glib의 이전 버전을 사용하도록 지시하는 쉬운 방법이 있는지 궁금합니다.

컴파일러와 링커에게 기본값보다 이전 버전이나 새 버전을 사용하도록 지시할 수 있지만 분명히 해당 버전을 설치해야 하며 이는 잘못된 버전의 glib 라이브러리를 사용하려고 하는 다른 프로그램에 문제를 일으킬 수 있습니다.

따라서 일반적으로 최후의 수단으로 여러 버전의 라이브러리만 설치하십시오. 특히 많은 프로그램에서 사용되는 glib와 같은 범용 라이브러리의 경우 더욱 그렇습니다.

오류 검사를 무시합니다.

gcc 명령의 -Wall 플래그는 gcc에게 모든 경고에 플래그를 지정하도록 지시하며, 몇 년 동안 gcc의 기본 상태는 모든 경고를 오류로 처리하는 것입니다. 많은 사이트에서 이 질문을 하면 응답자는 간단히 웹 검색을 하라고 말할 것입니다.

gcc 매뉴얼 페이지를 확인한다면 더 이상 사용되지 않는 기능의 특정 문제를 처리하는 가장 좋은 방법은 다음을 추가하는 것임을 알 수 있습니다.

-Wno-deprecated-선언

이를 무시하고 -Wall을 사용하여 다른 모든 경고를 안전하게 확인하려면 gcc 명령에 추가하세요.

답변2

가 포함된 행을 주석 처리합니다 g_type_init. 그러면 문제가 해결될 것입니다.

관련 정보