You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt项目编译提示找不到math.h头文件的问题求助

Qt项目编译提示找不到math.h头文件的问题求助

各位大佬好,我最近在编译Qt项目时碰到了一个奇怪的问题,折腾了好几种方法都没解决,想请大家帮忙看看!

我最初运行的编译命令是这样的:

/usr/bin/x86_64-linux-gnu-g++-12 --sysroot=/home/mustafa/Desktop/Programming/QtProjects \
-DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB \
-I/usr/include/c++/12 -I/usr/include/x86_64-linux-gnu \
-I/home/mustafa/Desktop/Programming/QtProjects/build-pcm2-Desktop-Debug/pcm2_autogen/include \
-isystem /home/mustafa/Qt/6.6.1/gcc_64/include/QtCore \
-isystem /home/mustafa/Qt/6.6.1/gcc_64/include \
-isystem /home/mustafa/Qt/6.6.1/gcc_64/mkspecs/linux-g++ \
-isystem /home/mustafa/Qt/6.6.1/gcc_64/include/QtWidgets \
-isystem /home/mustafa/Qt/6.6.1/gcc_64/include/QtGui \
-isystem /usr/include \
-DQT_QML_DEBUG -g -std=gnu++17 -fdiagnostics-color=always -fPIC \
-MD -MT CMakeFiles/pcm2.dir/mainwindow.cpp.o -MF CMakeFiles/pcm2.dir/mainwindow.cpp.o.d \
-o CMakeFiles/pcm2.dir/mainwindow.cpp.o -c /home/mustafa/Desktop/Programming/QtProjects/pcm2/mainwindow.cpp

命令里明明带有-isystem /usr/include参数,这个目录下确实存在math.h头文件,但编译器却报出了如下错误:

/usr/include/c++/12/cmath:45:15: fatal error: math.h: No such file or directory
45 | #include_next <math.h>
|               ^~~~~~~~
compilation terminated.

我试过几种方法试图解决,但都没效果:

  • 手动给编译命令加上-I /usr/include/c++/12(这个目录下也有math.h),但错误依旧;
  • 在CMakeLists.txt里添加了:
    include_directories(BEFORE SYSTEM
    /usr/include
    /usr/include/c++/12
    )
    
    也没起作用;
  • 后来听人说可能我把问题复杂化了,于是我删除了自己手动加的/usr/include/x86_64-linux-gnu包含配置,把CMakeLists.txt还原成了Qt初始生成的样子:
    cmake_minimum_required(VERSION 3.5)
    
    project(pcm2 VERSION 0.1 LANGUAGES CXX)
    
    set(CMAKE_AUTOUIC ON)
    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTORCC ON)
    
    set(CMAKE_CXX_STANDARD 17)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    
    find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
    find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
    
    set(PROJECT_SOURCES
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
    )
    
    if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(pcm2
    MANUAL_FINALIZATION
    ${PROJECT_SOURCES}
    )
    # Define target properties for Android with Qt 6 as:
    #    set_property(TARGET pcm2 APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
    #                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
    else()
    if(ANDROID)
    add_library(pcm2 SHARED
    ${PROJECT_SOURCES}
    )
    # Define properties for Android with Qt 5 after find_package() calls as:
    #    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
    add_executable(pcm2
    ${PROJECT_SOURCES}
    )
    endif()
    endif()
    
    target_link_libraries(pcm2 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
    
    # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
    # If you are developing for iOS or macOS you should consider setting an
    # explicit, fixed bundle identifier manually though.
    if(${QT_VERSION} VERSION_LESS 6.1.0)
    set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.pcm2)
    endif()
    set_target_properties(pcm2 PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
    )
    
    include(GNUInstallDirs)
    install(TARGETS pcm2
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    )
    
    if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(pcm2)
    endif()
    
    但现在编译命令变成了这样,还是报同样的错误:
    /usr/bin/x86_64-linux-gnu-g++-12 --sysroot=/home/mustafa/Desktop/Programming/QtProjects \
    -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB \
    -I/home/mustafa/Desktop/Programming/QtProjects/build-pcm3-Desktop-Debug/pcm3_autogen/include \
    -isystem /home/mustafa/Qt/6.6.1/gcc_64/include/QtCore \
    -isystem /home/mustafa/Qt/6.6.1/gcc_64/include \
    -isystem /home/mustafa/Qt/6.6.1/gcc_64/mkspecs/linux-g++ \
    -isystem /home/mustafa/Qt/6.6.1/gcc_64/include/QtWidgets \
    -isystem /home/mustafa/Qt/6.6.1/gcc_64/include/QtGui \
    -isystem /usr/include \
    -DQT_QML_DEBUG -g -std=gnu++17 -fdiagnostics-color=always -fPIC \
    -MD -MT CMakeFiles/pcm3.dir/pcm3_autogen/mocs_compilation.cpp.o -MF CMakeFiles/pcm3.dir/pcm3_autogen/mocs_compilation.cpp.o.d \
    -o CMakeFiles/pcm3.dir/pcm3_autogen/mocs_compilation.cpp.o -c /home/mustafa/Desktop/Programming/QtProjects/build-pcm3-Desktop-Debug/pcm3_autogen/mocs_compilation.cpp
    

我现在怀疑是不是cmath里用的#include_next <math.h>导致的问题?还是有其他我没注意到的地方?麻烦各位大佬帮忙分析下,谢谢了!

备注:内容来源于stack exchange,提问作者Mustafa Aslan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 06:13:12