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

CMake与Flutter:Linux下无法构建运行Flutter应用的问题

解决Flutter Linux构建时CMake链接libstdc++失败的问题

问题根源

你遇到的错误/usr/bin/ld: cannot find -lstdc++: No such file or directory,本质是clang在尝试静态链接GNU标准C库(libstdc++)时,系统缺少对应的静态库文件,或是误用了clang默认的标准库配置。


解决方案1:安装静态libstdc++依赖

若坚持使用GNU的libstdc作为标准库,先安装系统的静态libstdc包:

  • Debian/Ubuntu系:
    sudo apt update
    sudo apt install libstdc++-11-dev libstdc++6-static
    
    注:版本号需匹配系统gcc版本,比如系统用gcc-9则替换为libstdc++-9-dev

然后修正CMakeLists.txt中的错误配置:

  1. 移除CMAKE_CXX_COMPILER的多余转义,直接写绝对路径:
    set(CMAKE_CXX_COMPILER "/usr/bin/clang++")
    
  2. 用CMake标准方式设置C++版本,替代直接修改CXX_FLAGS:
    set(CMAKE_CXX_STANDARD 17)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    

修改后重新执行构建命令:

cd linux
rm -rf build
mkdir build && cd build
cmake ..
cmake --build .

解决方案2:切换到Clang原生libc++标准库

若更倾向于使用Clang适配性更好的原生libc++,修改CMakeLists.txt配置如下:

cmake_minimum_required(VERSION 3.10)
project(runner LANGUAGES CXX)

# 设置Clang编译器
set(CMAKE_CXX_COMPILER "/usr/bin/clang++")

# 指定使用libc++作为标准库
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++ -static-libc++")

# 设置C++17标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Rest of the CMakeLists.txt content...

安装libc++静态库依赖:

sudo apt install libc++-dev libc++abi-dev libc++-static

重新执行构建命令即可。


额外建议

  • 尽量避免手动修改Flutter生成的CMakeLists.txt核心配置,若仅需指定编译器,可通过cmake命令行参数传递,无需修改文件:
    cmake .. -DCMAKE_CXX_COMPILER=/usr/bin/clang++
    
  • 执行flutter upgrade更新到最新Flutter版本后再尝试构建,避免版本兼容问题。

内容的提问来源于stack exchange,提问作者Farhan Momin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:26:27