Skip to content
This repository has been archived by the owner on Dec 19, 2023. It is now read-only.

linux-Qt6.5下编译错误 #291

Open
czyt1988 opened this issue Oct 9, 2023 · 3 comments
Open

linux-Qt6.5下编译错误 #291

czyt1988 opened this issue Oct 9, 2023 · 3 comments

Comments

@czyt1988
Copy link
Contributor

czyt1988 commented Oct 9, 2023

[ 83%] Building CXX object src/SARibbonBar/CMakeFiles/SARibbonBar.dir/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp.o
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:301:10: error: ambiguating new declaration of ‘QString gtkSettings(const gchar*)’
301 | Type gtkSettings(const gchar property)
| ^~~~~~~~~~~
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:477:1: note: in expansion of macro ‘GTKSETTINGS_IMPL’
477 | GTKSETTINGS_IMPL(QString, const QString result = QUtf8String(g_value_get_string(&value));)
| ^~~~~~~~~~~~~~~~
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:301:10: note: old declaration ‘bool gtkSettings(const gchar
)’
301 | Type gtkSettings(const gchar property)
| ^~~~~~~~~~~
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:476:1: note: in expansion of macro ‘GTKSETTINGS_IMPL’
476 | GTKSETTINGS_IMPL(bool, const bool result = g_value_get_boolean(&value);)
| ^~~~~~~~~~~~~~~~
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp: In instantiation of ‘T wangwenx190::FramelessHelper::gtkSettings(const gchar
) [with T = bool; gchar = char]’:
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:499:46: required from here
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:495:17: error: ‘g_object_get’ was not declared in this scope; did you mean ‘g_object_unref’?
495 | g_object_get(settings, property, &result, nullptr);
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| g_object_unref
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp: In instantiation of ‘T wangwenx190::FramelessHelper::gtkSettings(const gchar*) [with T = char*; gchar = char]’:
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:508:45: required from here
/home/runner/work/SARibbon/SARibbon/src/SARibbonBar/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp:495:17: error: ‘g_object_get’ was not declared in this scope; did you mean ‘g_object_unref’?
495 | g_object_get(settings, property, &result, nullptr);
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| g_object_unref
gmake[2]: *** [src/SARibbonBar/CMakeFiles/SARibbonBar.dir/build.make:832: src/SARibbonBar/CMakeFiles/SARibbonBar.dir/3rdparty/framelesshelper/src/core/platformsupport_linux.cpp.o] Error 1

@wangwenx190
Copy link
Owner

需要安装 libxcb1-dev libgtk-3-dev

@czyt1988
Copy link
Contributor Author

czyt1988 commented Oct 16, 2023

安装后可以编译了,但遇到了一个断言,位于:

src/core/utils_linux.cpp line 613

我看了一下源码,这个断言是xcb_atom_t Utils::internAtom(const char *name)函数中的Q_ASSERT(connection);

xcb_atom_t Utils::internAtom(const char *name)
{
    Q_ASSERT(name);
    Q_ASSERT(*name != '\0');
    if (!name || (*name == '\0')) {
        return XCB_NONE;
    }
    xcb_connection_t * const connection = x11_connection();
    Q_ASSERT(connection);
    if (!connection) {
        return XCB_NONE;
    }
    const xcb_intern_atom_cookie_t cookie = xcb_intern_atom(connection, false, qstrlen(name), name);
    xcb_intern_atom_reply_t * const reply = xcb_intern_atom_reply(connection, cookie, nullptr);
    if (!reply) {
        return XCB_NONE;
    }
    const xcb_atom_t atom = reply->atom;
    std::free(reply);
    return atom;
}

在断言后还进行了判断,并在空的时候返回XCB_NONE,此断言是否有必要?

    xcb_connection_t * const connection = x11_connection();
    Q_ASSERT(connection);
    if (!connection) {
        return XCB_NONE;
    }

@wangwenx190
Copy link
Owner

你可以暂时注释掉。此断言可能无必要,只是我不知道connection为空是否为常规现象

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants