leg*_*yO7 27 ubuntu clang++ flutter-linux
flutter runLinux 桌面应用程序出现此错误
Running "flutter pub get" in proj... 5.3s\nLaunching lib/main.dart on Linux in debug mode...\nCMake Error at /usr/share/cmake-3.22/Modules/CMakeTestCXXCompiler.cmake:62 (message):\n The C++ compiler\n\n "/usr/bin/clang++"\n\n is not able to compile a simple test program.\n\n It fails with the following output:\n\n Change Dir: /media/kingbob/Dvolve/EData/proj/build/linux/x64/debug/CMakeFiles/CMakeTmp\n\n Run Build Command(s):/usr/bin/ninja cmTC_5f1b6 && [1/2] Building CXX object CMakeFiles/cmTC_5f1b6.dir/testCXXCompiler.cxx.o\n [2/2] Linking CXX executable cmTC_5f1b6\n FAILED: cmTC_5f1b6 \n : && /usr/bin/clang++ CMakeFiles/cmTC_5f1b6.dir/testCXXCompiler.cxx.o -o cmTC_5f1b6 && :\n /usr/bin/ld: cannot find -lstdc++: No such file or directory\n clang: error: linker command failed with exit code 1 (use -v to see invocation)\n ninja: build stopped: subcommand failed.\n\n\n\n\n\n CMake will not be able to correctly generate this project.\nCall Stack (most recent call first):\n CMakeLists.txt:2 (project)\n\n\nBuilding Linux application... \nException: Unable to generate build files\nRun Code Online (Sandbox Code Playgroud)\nflutter doctor 的输出
\nDoctor summary (to see all details, run flutter doctor -v):\n[\xe2\x9c\x93] Flutter (Channel stable, 3.3.8, on Ubuntu 22.04.1 LTS 5.15.0-53-generic, locale en_IN)\n[\xe2\x9c\x93] Android toolchain - develop for Android devices (Android SDK version 33.0.0)\n[\xe2\x9c\x93] Chrome - develop for the web\n[\xe2\x9c\x93] Linux toolchain - develop for Linux desktop\n[\xe2\x9c\x93] Android Studio (version 2021.3)\n[\xe2\x9c\x93] Connected device (2 available)\n[\xe2\x9c\x93] HTTP Host Availability\n\n\xe2\x80\xa2 No issues found!\nRun Code Online (Sandbox Code Playgroud)\nclang++ 的输出 --version
\nUbuntu clang version 14.0.0-1ubuntu1\nTarget: x86_64-pc-linux-gnu\nThread model: posix\nInstalledDir: /usr/bin\nRun Code Online (Sandbox Code Playgroud)\n我注意到它/usr/lib/libstdc++.so丢失了,所以手动创建了一个符号链接\n sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/lib/libstdc++.so。
然后我就出现了这个错误flutter run
Launching lib/main.dart on Linux in debug mode...\n/usr/include/glib-2.0/glib/glib-typeof.h:39:10: fatal error: 'type_traits' file not found\n/usr/include/glib-2.0/glib/glib-typeof.h:39:10: fatal error: 'type_traits' file not found\n/usr/include/glib-2.0/glib/glib-typeof.h:39:10: fatal error: 'type_traits' file not found\n/usr/include/glib-2.0/glib/glib-typeof.h:39:10: fatal error: 'type_traits' file not found\n/usr/include/glib-2.0/glib/glib-typeof.h:39:10: fatal error: 'type_traits' file not found\n/usr/include/glib-2.0/glib/glib-typeof.h:39:10: fatal error: 'type_traits' file not found\nRun Code Online (Sandbox Code Playgroud)\n
Kev*_*vin 70
我在系统升级后遇到了类似的问题。过了一会儿,我意识到这是因为nvidia-driver-520-open安装了gcc-12。我使用clang-15的是通过脚本installClang15.sh安装的。clang-15取决于,因此安装libstdc++-11-dev和gcc-11。问题是一旦gcc-12安装,clang++就会自动拾取它而不是gcc-11. 这可以通过输出来确认,clang++ --verbose例如
Ubuntu clang version 15.0.6
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/11
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12
Candidate multilib: .;@m64
Selected multilib: .;@m64
Run Code Online (Sandbox Code Playgroud)
libstdc++-12-dev感谢这个 GitHub 评论,我想到了这个解决方案。这是最简单的解决方案,但它有一些缺点。在 Ubuntu 上,您可以使用以下命令安装软件包
sudo apt install libstdc++-12-dev
Run Code Online (Sandbox Code Playgroud)
我面临的缺点是:
nvidia-driver-520-open办gcc-13?我必须再次弄清楚为什么会出现此错误,然后安装libstdc++-13-dev,这可能需要再次更新一些代码。clang++解决方案 2:修复使用的gcc 安装我没有找到任何干净且简单的方法来做到这一点,但有一些方法。clang-16截至 2022 年 11 月 28 日尚未发布,但在构建 clang时可用,这里有一个新选项--gcc-install-dir描述。这修复了编译:
$HOME/src/llvm-project/staging/bin/clang++ --gcc-install-dir=/usr/lib/gcc/x86_64-linux-gnu/11 a.cpp
Run Code Online (Sandbox Code Playgroud)
哪里a.cpp有一个简单的 C++“Hello World!” 程序
#include <iostream>
int main() { std::cout << "Hello World!" << std::endl; }
Run Code Online (Sandbox Code Playgroud)
旧版本clang有该选项,但由于llvm 的讨论中--gcc-toolchain描述的原因,该选项不太有用。但是,您仍然可以发挥聪明才智,按照Stack Overflow 答案的建议进行操作。TL ;DR是
sudo mkdir --parents /opt/gcc-root/lib/gcc/x86_64-linux-gnu
sudo ln --symbolic /usr/lib/gcc/x86_64-linux-gnu/11 /opt/gcc-root/lib/gcc/x86_64-linux-gnu/11
sudo ln --symbolic /usr/include /opt/gcc-root/
Run Code Online (Sandbox Code Playgroud)
这ln --symbolic /usr/include /opt/gcc-root/很重要,否则我会遇到增量构建的问题。然后,你应该能够编译
clang++ --gcc-toolchain=/opt/gcc-root a.cpp
Run Code Online (Sandbox Code Playgroud)
这就留下了一个问题:“如何在系统范围内集成这个编译器选项?” 我在这里没有找到满意的答案。
export CCC_OVERRIDE_OPTIONS=^--gcc-toolchain=/opt/gcc-root记录的方式使用。这可能是这个问题的最佳解决方案。clang++,其中包含
#!/usr/bin/env bash
/usr/local/bin/clang++ --gcc-toolchain=/opt/gcc-root "$@"
Run Code Online (Sandbox Code Playgroud)
然后使用export CXX=<PATH_TO_SCRIPT>/clang++. 这在实践中效果很好:这是我快速而肮脏的修复。但是,我担心工具链中的其他工具(例如clang-tidy或clangd)如果没有传递该选项,可能会出现问题--gcc-toolchain。根据您的设置方式,他们可能看不到该选项,因为它不会位于compile_commands.json使用CMAKE_EXPORT_COMPILE_COMMANDSCMake 变量创建的文件中。clang++为,例如,,fixed-gcc-root-clang++然后fixed-gcc-root-clang++.cfg在适当的位置创建一个包含选项 的文件(对于clang-15,它是) 。最后,你使用. 一个问题是,如果某人或某物(例如 IDE)直接使用,您的配置文件将不会被读取。例如,如果创建新的符号链接,您也会遇到问题,因为在这种情况下,将不会读取配置文件。/usr/lib/llvm-15/bin--gcc-toolchain=/opt/gcc-rootexport CXX=fixed-gcc-root-clang++clang++fixed-gcc-root-clang++c++ -> fixed-gcc-root-clang++nvidia-driver-520-open安装了新的传递依赖项)在 C++ 构建系统中找到了解决方案。因此,关注点分离原则没有得到遵守。Bhi*_*uti 11
安装这个:
重新安装所有依赖项(现在包含在此处)
sudo apt-get install clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev libstdc++-12-dev
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读最后两个条目 https://github.com/flutter/flutter/issues/115909
| 归档时间: |
|
| 查看次数: |
19955 次 |
| 最近记录: |