QT源码编译#error “Q_ATOMIC_INT64_IS_SUPPORTED must be defined on a 64-bit platform“
/home/ali/Qt/5.15.2/Src/qtbase/include/QtCore/../../src/corelib/global/qglobal.h:121:63: error: static assertion failed: template parameter is an integral of a size not supported on this platform
121 | # define Q_STATIC_ASSERT_X(Condition, Message) static_assert(bool(Condition), Message)
| ^~~~~~~~~~~~~~~
/home/ali/Qt/5.15.2/Src/qtbase/include/QtCore/../../src/corelib/thread/qbasicatomic.h:97:5: note: in expansion of macro ‘Q_STATIC_ASSERT_X’
97 | Q_STATIC_ASSERT_X(QAtomicOpsSupport<sizeof(T)>::IsSupported, "template parameter is an integral of a size not supported on this platform");
| ^~~~~~~~~~~~~~~~~
make[3]: *** [Makefile:23936: .obj/qatomic.o] Error 1
解决方案:在对应的交叉编译配置文件中添加一行:
clangdefines += Q_ATOMIC_INT64_IS_SUPPORTED
比如编译的目标代码为linux-aarch64-gnu,则在qtbase/mkspecs/linux-aarch64-gnu-g+/qmake.conf文件中添加:
#
# qmake configuration for building with aarch64-none-linux-gnu-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
clangdefines += Q_ATOMIC_INT64_IS_SUPPORTED
# modifications to g++.conf
QMAKE_CC = aarch64-none-linux-gnu-gcc
QMAKE_CXX = aarch64-none-linux-gnu-g++
QMAKE_LINK = aarch64-none-linux-gnu-g++
QMAKE_LINK_SHLIB = aarch64-none-linux-gnu-g++
# modifications to linux.conf
QMAKE_AR = aarch64-none-linux-gnu-ar cqs
QMAKE_OBJCOPY = aarch64-none-linux-gnu-objcopy
QMAKE_NM = aarch64-none-linux-gnu-nm -P
QMAKE_STRIP = aarch64-none-linux-gnu-strip
load(qt_config)