Flutter项目执行dart run jni:setup时C编译器无法编译测试程序,报GLIBC版本缺失错误
Flutter项目执行dart run jni:setup时C编译器无法编译测试程序,报GLIBC版本缺失错误
嘿,我看你在执行dart run jni:setup的时候碰到了C编译器的问题,核心原因是Flutter Snap包自带的GLIBC版本和系统GCC插件依赖的版本不匹配,导致链接阶段失败。让我给你几个可行的解决方案:
问题根源
从错误日志里能看到关键报错:
/snap/flutter/current/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so: error loading plugin: /snap/flutter/141/usr/bin/../../lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so)
你的系统GCC 11.4.0的LTO(链接时优化)插件需要GLIBC 2.33,但Flutter Snap包使用的是较旧的GLIBC版本,两者环境隔离导致依赖冲突。
解决方案
方案一:切换到非Snap版本的Flutter(推荐)
Snap包的环境隔离特性很容易引发这类依赖问题,换成官方标准版本能从根源上避免:
- 卸载Snap版Flutter:
sudo snap remove flutter - 通过官方脚本安装稳定版Flutter:
git clone https://github.com/flutter/flutter.git -b stable export PATH="$PATH:`pwd`/flutter/bin" - 重启终端,验证Flutter版本:
flutter --version - 重新执行JNI setup命令:
dart run jni:setup -p jni -s src/calculation
方案二:禁用LTO链接优化
如果你不想更换Flutter版本,可以尝试关闭LTO,绕过依赖高版本GLIBC的插件:
执行setup时添加CMake参数禁用LTO:
dart run jni:setup -p jni -s src/calculation -D CMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF
方案三:匹配系统GCC和GLIBC版本
如果坚持用Snap版Flutter,可以安装和Snap包GLIBC版本兼容的GCC:
- 查看Snap包中的GLIBC版本:
/snap/flutter/current/usr/lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC - 安装对应版本的GCC(比如GCC 9,和Snap包默认版本匹配):
sudo apt install gcc-9 g++-9 - 指定CMake使用该版本编译器:
dart run jni:setup -p jni -s src/calculation -D CMAKE_C_COMPILER=/usr/bin/gcc-9 -D CMAKE_CXX_COMPILER=/usr/bin/g++-9
完整错误日志
####@flash:~/Documents/app_dev/test_one$ dart run jni:setup -p jni -s src/calculation selecting source directories: [src/calculation, /home/####/.pub-cache/hosted/pub.dev/jni-0.7.2/src] Target newer than source, skipping build. + [.dart_tool/jni/jni_native_build_JKXCIO] cmake /home/####/Documents/app_dev/test_one/src/calculation -- The C compiler identification is GNU 11.4.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- broken -- Configuring incomplete, errors occurred! See also "/home/####/Documents/app_dev/test_one/.dart_tool/jni/jni_native_build_JKXCIO/CMakeFiles/CMakeOutput.log". See also "/home/####/Documents/app_dev/test_one/.dart_tool/jni/jni_native_build_JKXCIO/CMakeFiles/CMakeError.log". CMake Error at /snap/flutter/141/usr/share/cmake-3.16/Modules/CMakeTestCCompiler.cmake:60 (message): The C compiler "/usr/bin/cc" is not able to compile a simple test program. It fails with the following output: Change Dir: /home/#####/Documents/app_dev/test_one/.dart_tool/jni/jni_native_build_JKXCIO/CMakeFiles/CMakeTmp Run Build Command(s):/usr/bin/gmake cmTC_fcc09/fast && /usr/bin/gmake -f CMakeFiles/cmTC_fcc09.dir/build.make CMakeFiles/cmTC_fcc09.dir/build gmake[1]: Entering directory '/home/#####/Documents/app_dev/test_one/.dart_tool/jni/jni_native_build_JKXCIO/CMakeFiles/CMakeTmp' Building C object CMakeFiles/cmTC_fcc09.dir/testCCompiler.c.o /usr/bin/cc -o CMakeFiles/cmTC_fcc09.dir/testCCompiler.c.o -c /home/####/Documents/app_dev/test_one/.dart_tool/jni/jni_native_build_JKXCIO/CMakeFiles/CMakeTmp/testCCompiler.c Linking C executable cmTC_fcc09 /snap/flutter/141/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_fcc09.dir/link.txt --verbose=1 /usr/bin/cc -B/snap/flutter/current/usr/lib/gcc/x86_64-linux-gnu/9 -B/snap/flutter/current/usr/lib/x86_64-linux-gnu -B/snap/flutter/current/lib/x86_64-linux-gnu -B/snap/flutter/current/usr/lib/ -L/snap/flutter/current/usr/lib/gcc/x86_64-linux-gnu/9 -L/snap/flutter/current/usr/lib/x86_64-linux-gnu -L/snap/flutter/current/lib/x86_64-linux-gnu -L/snap/flutter/current/usr/lib/ -lblkid -lgcrypt -llzma -llz4 -lgpg-error -luuid -lpthread -ldl -lepoxy -lfontconfig -B/snap/flutter/current/usr/lib/gcc/x86_64-linux-gnu/9 -B/snap/flutter/current/usr/lib/x86_64-linux-gnu -B/snap/flutter/current/lib/x86_64-linux-gnu -B/snap/flutter/current/usr/lib/ -L/snap/flutter/current/usr/lib/gcc/x86_64-linux-gnu/9 -L/snap/flutter/current/usr/lib/x86_64-linux-gnu -L/snap/flutter/current/lib/x86_64-linux-gnu -L/snap/flutter/current/usr/lib/ -lblkid -lgcrypt -llzma -llz4 -lgpg-error -luuid -lpthread -ldl -lepoxy -lfontconfig CMakeFiles/cmTC_fcc09.dir/testCCompiler.c.o -o cmTC_fcc09 /snap/flutter/current/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so: error loading plugin: /snap/flutter/141/usr/bin/../../lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so) collect2: error: ld returned 1 exit status gmake[1]: *** [CMakeFiles/cmTC_fcc09.dir/build.make:87: cmTC_fcc09] Error 1 gmake[1]: Leaving directory '/home/####/Documents/app_dev/test_one/.dart_tool/jni/jni_native_build_JKXCIO/CMakeFiles/CMakeTmp' gmake: *** [Makefile:121: cmTC_fcc09/fast] Error 2 CMake will not be able to correctly generate this project. Call Stack (most recent call first): CMakeLists.txt:8 (project) Command exited with status code 1 + [.dart_tool/jni/jni_native_build_JKXCIO] cmake --build . gmake: *** No targets specified and no makefile found. Stop. Command exited with status code 2 + [.dart_tool/jni/jni_native_build_KGJRRZ] cmake /home/#####/.pub-cache/hosted/pub.dev/jni-0.7.2/src -- The C compiler identification is GNU 11.4.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- broken -- Configuring incomplete, errors occurred! See also "/home/####/Documents/app_dev/test_one/.dart_tool/jni/jni_native_build_KGJRRZ/CMakeFiles/CMakeOutput.log". See also "/home/#####/Documents/app_dev/test_one/.dart_tool/jni/jni_native_build_KGJRRZ/CMakeFiles/CMakeError.log". CMake Error at /snap/flutter/141/usr/share/cmake-3.16/Modules/CMakeTestCCompiler.cmake:60 (message): The C compiler "/usr/bin/cc" is not able to compile a simple test program. It fails with the following output: Change Dir: /home/####/Documents/app_dev/test_one/.dart_tool/jni/jni_native_build_KGJRRZ/CMakeFiles/CMakeTmp Run Build Command(s):/usr/bin/gmake cmTC_c70af/fast && /usr/bin/gmake -f CMakeFiles/cmTC_c70af.dir/build.make CMakeFiles/cmTC_c70af.dir/build gmake[1]: Entering directory '/home/#####/Documents/app_dev/test_one/.dart_tool/jni/jni_native_build_KGJRRZ/CMakeFiles/CMakeTmp' Building C object CMakeFiles/cmTC_c70af.dir/testCCompiler.c.o /usr/bin/cc -o CMakeFiles/cmTC_c70af.dir/testCCompiler.c.o -c /home/#####/Documents/app_dev/test_one/.dart_tool/jni/jni_native_build_KGJRRZ/CMakeFiles/CMakeTmp/testCCompiler.c Linking C executable cmTC_c70af /snap/flutter/141/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_c70af.dir/link.txt --verbose=1 /usr/bin/cc -B/snap/flutter/current/usr/lib/gcc/x86_64-linux-gnu/9 -B/snap/flutter/current/usr/lib/x86_64-linux-gnu -B/snap/flutter/current/lib/x86_64-linux-gnu -B/snap/flutter/current/usr/lib/ -L/snap/flutter/current/usr/lib/gcc/x86_64-linux-gnu/9 -L/snap/flutter/current/usr/lib/x86_64-linux-gnu -L/snap/flutter/current/lib/x86_64-linux-gnu -L/snap/flutter/current/usr/lib/ -lblkid -lgcrypt -llzma -llz4 -lgpg-error -luuid -lpthread -ldl -lepoxy -lfontconfig -B/snap/flutter/current/usr/lib/gcc/x86_64-linux-gnu/9 -B/snap/flutter/current/usr/lib/x86_64-linux-gnu -B/snap/flutter/current/lib/x86_64-linux-gnu -B/snap/flutter/current/usr/lib/ -L/snap/flutter/current/usr/lib/gcc/x86_64-linux-gnu/9 -L/snap/flutter/current/usr/lib/x86_64-linux-gnu -L/snap/flutter/current/lib/x86_64-linux-gnu -L/snap/flutter/current/usr/lib/ -lblkid -lgcrypt -llzma -llz4 -lgpg-error -luuid -lpthread -ldl -lepoxy -lfontconfig CMakeFiles/cmTC_c70af.dir/testCCompiler.c.o -o cmTC_c70af /snap/flutter/current/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so: error loading plugin: /snap/flutter/141/usr/bin/../../lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /usr/lib/gcc/x86_64-linux-gnu/11/liblto_plugin.so) collect2: error: ld returned 1 exit status gmake[1]: *** [CMakeFiles/cmTC_c70af.dir/build.make:87: cmTC_c70af] Error 1 gmake[1]: Leaving directory '/home/####/Documents/app_dev/test_one/.dart_tool/jni/jni_native_build_KGJRRZ/CMakeFiles/CMakeTmp' gmake: *** [Makefile:121: cmTC_c70af/fast] Error 2 CMake will not be able to correctly generate this project. Call Stack (most recent call first): CMakeLists.txt:8 (project) Command exited with status code 1 + [.dart_tool/jni/jni_native_build_KGJRRZ] cmake --build . gmake: *** No targets specified and no makefile found. Stop.
备注:内容来源于stack exchange,提问作者bot_one
相关产品推荐
相关产品推荐

