阿白| 2024-12-30 10:49 采纳率: 90.4%
浏览 63
已结题

使用Ubuntu16通过脚本配置Qt时出现报错:Qt requires a C++11 compiler and yours does not seem to be that

部分报错如下

CFG_HOST_ARCH="x86_64"
CFG_HOST_CPUFEATURES=" mmx sse sse2"
System architecture: 'arm'
Host architecture: 'x86_64'
arm-none-linux-gnueabi-g++ -c -fvisibility=hidden fvisibility.c
Symbol visibility control enabled.
collect2: fatal error: cannot find 'ld'
compilation terminated.
arm-none-linux-gnueabi-g++ -o libtest.so -shared -Wl,-Bsymbolic-functions -fPIC bsymbolic_functions.c
bsymbolic_functions.c:2:2: error: #error "Symbolic function binding on this architecture may be broken, disabling it (see QTBUG-36129)."
 #error "Symbolic function binding on this architecture may be broken, disabling it (see QTBUG-36129)."
  ^
Symbolic function binding disabled.
checking for C++11... 
arm-none-linux-gnueabi-g++ -c -pipe -O2-march=armv7-a -O2-march=armv7-a -O2 -std=gnu++11 -Wall -W -fPIC  -I. -I/opt/tslib1.4/include -I../../../mkspecs/linux-arm-gnueabi-g++ -o c++11.o c++11.cpp
cc1plus: error: argument to '-O' should be a non-negative integer, 'g', 's' or 'fast'
cc1plus: error: argument to '-O' should be a non-negative integer, 'g', 's' or 'fast'
Makefile:180: recipe for target 'c++11.o' failed
make: *** [c++11.o] Error 1
C++11 disabled.
ERROR: Qt requires a C++11 compiler and yours does not seem to be that.
Please upgrade.

脚本如下:


#!/bin/sh
./configure \
-v \
-prefix /opt/qt5.7.0 \
-release \
-opensource \
-make libs \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-zlib \
-no-opengl \
-skip qt3d \
-skip qtcanvas3d \
-skip qtpurchasing \
-no-sse2 \
-no-openssl \
-no-nis \
-no-cups \
-no-glib \
-no-iconv \
-nomake examples \
-nomake tools \
-skip qtvirtualkeyboard \
-I/opt/tslib1.4/include \
-L/opt/tslib1.4/lib
exit

qmake.conf配置如下:


#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLATFORM = linux #eglfs
QMAKE_CFLAGS_RELEASE   += -O2-march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2-march=armv7-a

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                = arm-none-linux-gnueabi-gcc
QMAKE_CXX               = arm-none-linux-gnueabi-g++
QMAKE_LINK              = arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = arm-none-linux-gnueabi-g++

# modifications to linux.conf
QMAKE_AR                = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = arm-none-linux-gnueabi-objcopy
QMAKE_NM                = arm-none-linux-gnueabi-nm -P
QMAKE_STRIP             = arm-none-linux-gnueabi-strip
load(qt_config)
  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-12-30 11:06
    关注

    该回答引用自GPT-deepseek, 由博主 GISer Liu 编写:

    问题分析

    用户在Ubuntu 16系统上通过脚本配置Qt时,遇到了以下报错信息:

    1. **collect2: fatal error: cannot find 'ld'**:这表明在编译过程中,链接器ld未找到,可能是由于交叉编译工具链未正确配置或未安装。

    2. **#error "Symbolic function binding on this architecture may be broken, disabling it (see QTBUG-36129)."**:这是一个与架构相关的错误,提示符号绑定在该架构上可能存在问题。

    3. **cc1plus: error: argument to '-O' should be a non-negative integer, 'g', 's' or 'fast'**:这表明在编译选项中,-O参数的值不符合要求,可能是由于脚本中-O2-march=armv7-a的写法有误。

    4. **ERROR: Qt requires a C++11 compiler and yours does not seem to be that.**:这表明当前编译器不支持C++11标准,可能是由于编译器版本过低或未正确配置。

    解决方案

    1. 确保交叉编译工具链正确安装和配置

    首先,确保已正确安装交叉编译工具链,并且ld链接器可用。可以通过以下命令检查:

    arm-none-linux-gnueabi-g++ -v
    

    如果未找到ld,可能需要安装或重新配置交叉编译工具链。可以使用以下命令安装:

    sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
    

    2. 修复编译选项错误

    在脚本中,-O2-march=armv7-a的写法有误,应该将其分开为-O2 -march=armv7-a。修改脚本中的相关部分:

    arm-none-linux-gnueabi-g++ -c -pipe -O2 -march=armv7-a -O2 -march=armv7-a -O2 -std=gnu++11 -Wall -W -fPIC  -I. -I/opt/tslib1.4/include -I../../../mkspecs/linux-arm-gnueabi-g++ -o c++11.o c++11.cpp
    

    3. 确保编译器支持C++11

    如果编译器版本过低,可能不支持C++11标准。可以通过以下命令检查编译器版本:

    arm-none-linux-gnueabi-g++ --version
    

    如果版本过低,建议升级编译器。可以通过以下命令安装较新的版本:

    sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
    

    4. 修改配置脚本

    根据上述分析,修改配置脚本如下:

    #!/bin/sh
    ./configure \
    -v \
    -prefix /opt/qt5.7.0 \
    -release \
    -opensource \
    -make libs \
    -xplatform linux-arm-gnueabi-g++ \
    -optimized-qmake \
    -pch \
    -qt-sql-sqlite \
    -qt-libjpeg \
    -qt-zlib \
    -no-opengl \
    -skip qt3d \
    -skip qtcanvas3d \
    -skip qtpurchasing \
    -no-sse2 \
    -no-openssl \
    -no-nis \
    -no-cups \
    -no-glib \
    -no-iconv \
    -nomake examples \
    -nomake tools \
    -skip qtvirtualkeyboard \
    -I/opt/tslib1.4/include \
    -L/opt/tslib1.4/lib
    exit
    

    总结

    通过以上步骤,可以解决用户在Ubuntu 16上配置Qt时遇到的报错问题。确保交叉编译工具链正确安装和配置,修复编译选项错误,并确保编译器支持C++11标准,是解决该问题的关键。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月7日
  • 已采纳回答 12月30日
  • 修改了问题 12月30日
  • 创建了问题 12月30日