原因
在編譯 qt-everywhere-src-5.15.7 靜態(tài)的時候,遇到一個error,只能動手查方法了
錯誤
In file included from ../../include/QtCore/5.15.7/QtCore/private/qorderedmutexlocker_p.h:1,
from io/qprocess_p.h:65,
from io/qprocess.cpp:89:
../../include/QtCore/5.15.7/QtCore/private/../../../../../src/corelib/thread/qorderedmutexlocker_p.h: In constructor ‘QOrderedMutexLocker::QOrderedMutexLocker(QOrderedMutexLocker&&)’:
../../include/QtCore/5.15.7/QtCore/private/../../../../../src/corelib/thread/qorderedmutexlocker_p.h:95:21: error: ‘exchange’ is not a member of ‘std’
95 | : mtx1(std::exchange(other.mtx1, nullptr))
| ^~~~~~~~
../../include/QtCore/5.15.7/QtCore/private/../../../../../src/corelib/thread/qorderedmutexlocker_p.h:96:21: error: ‘exchange’ is not a member of ‘std’
96 | , mtx2(std::exchange(other.mtx2, nullptr))
| ^~~~~~~~
../../include/QtCore/5.15.7/QtCore/private/../../../../../src/corelib/thread/qorderedmutexlocker_p.h:97:23: error: ‘exchange’ is not a member of ‘std’
97 | , locked(std::exchange(other.locked, false))
| ^~~~~~~~
make[3]: *** [Makefile:39413: .obj/qprocess.o] Error 1
make[3]: Leaving directory '/home/wxw/qt-everywhere-src-5.15.7/qtbase/src/corelib'
解決方法:
使用vscode或者其他編輯器,文本文件也行,打開那個報錯的文件:
例如我這個:
/qt-everywhere-src-5.15.7/qtbase/src/corelib/thread/qorderedmutexlocker_p.h
打開后,根據(jù)行號,更改代碼:
原來的代碼
// 原來的代碼
QOrderedMutexLocker(QOrderedMutexLocker &&other) noexcept
: mtx1(std::exchange(other.mtx1, nullptr))
, mtx2(std::exchange(other.mtx2, nullptr))
, locked(std::exchange(other.locked, false))
{}
更改之后的代碼
// 更改之后的代碼
// 我還添加了這個頭文件 不知道是否有用
// #include <stddef.h>
QOrderedMutexLocker(QOrderedMutexLocker &&other) noexcept
: mtx1(qExchange(other.mtx1, nullptr))
, mtx2(qExchange(other.mtx2, nullptr))
, locked(qExchange(other.locked, false))
{}