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系:
注:版本号需匹配系统gcc版本,比如系统用gcc-9则替换为sudo apt update sudo apt install libstdc++-11-dev libstdc++6-staticlibstdc++-9-dev
然后修正CMakeLists.txt中的错误配置:
- 移除
CMAKE_CXX_COMPILER的多余转义,直接写绝对路径:set(CMAKE_CXX_COMPILER "/usr/bin/clang++") - 用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
相关产品推荐
相关产品推荐

