问题总结:pycharm clion使用wsl环境,可以编译但是运行不了,看起来像clion里没有子系统的环境变量,在终端可以运行,好像是这两个软件不能导入子系统自定义的环境变量
根据官方文档打开-fexperimental-library
**但是编译成功,运行时出错,连接不到libc++.so.1,看起来像clion没有成功导入ubuntu子系统的环境变量导致找不到链接库,怎么解决这个问题
/mnt/e/github/c++/clion_porjtct/C++20/cmake-build-debug/test1: error while loading shared libraries: libc++.so.1:
cannot open shared object file: No such file or directory
命令行编译运行可以,成功执行,
clang++ -std=c++20 -stdlib=libc++ -fexperimental-library -lc++ -lc++abi test.cpp -o test
(base) e7@LAPTOP-HHOSQ8I3:/mnt/e/github/c++/clion_porjtct/c++20/cmake-build-debug$ ./test1
The answer is 42.
ABCDEF
BCDEF
CDEF
DEF
EF
F
为项目添加了环境变量依然失败
#添加环境变量TEMPORARY echo 'export TEMPORARY = /usr/local'>>/.bashrc/.bashrc
#添加WSL和Windows进程之间共享环境变量 echo 'WSLENV=$WSLENV:TEMPORARY /mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe'>>
sudo apt-get install libc++-dev
-DCMAKE_CXX_FLAGS="-stdlib=libc++"
-DCMAKE_EXE_LINKER_FLAGS="-stdlib=libc++"
-DCMAKE_SHARED_LINKER_FLAGS="-stdlib=libc++"
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/
该回答引用于gpt与OKX安生共同编写:
根据您提供的信息,问题似乎是找不到 libc++ 的头文件。这可能是由于在编译和构建 LLVM 时未正确配置 libc++ 的路径所致。
为了解决这个问题,您可以尝试使用 -DCMAKE_CXX_FLAGS=-nostdinc++ -I/usr/local/include/c++/v1
参数重新运行 cmake
命令,指定 libc++ 的 include 路径。在此之后,您需要重新编译和安装 LLVM,以确保 libc++ 的路径被正确引用。
如果问题仍然存在,您可以按照以下步骤进行排除故障:
确认 libc++ 是否已经正确安装,并且路径是否正确。
检查 cmake
命令中是否开启了 -DLLVM_ENABLE_LIBCXX=ON
选项来启用 libc++ 支持。
尝试使用 -v
参数运行编译器(例如 clang++
),以查看编译器搜索路径是否包含 libc++ 的头文件路径。
希望这些信息能够帮助您解决问题。
您可以通过运行以下命令来卸载旧版本的 LLVM:
sudo make uninstall
注意,make uninstall 只能卸载先前使用 make install 安装的文件。如果您已手动安装其他文件,请确保也将其删除。
如果您想要保存当前版本的 LLVM,可以指定一个新的安装路径,例如 /usr/local/llvm-,以便在需要时轻松地从不同版本中进行选择。
不知道你这个问题是否已经解决, 如果还没有解决的话:注意不要使用太新的版本,Centos7默认gcc版本是4.8.5。高级的llvm需要ggc至少要为5.1版本。
可按照如下教程:https://www.cnblogs.com/BinBinStory/p/7499527.html 安装4.0.1版本。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据您的描述,可能存在以下几个问题:
您的命令中添加了DLIBCXX_ENABLE_INCOMPLETE_FEATURES=ON来开启libc++对format的支持,这是正确的。请注意,在不开启该选项时,libc++将自动忽略具有未实现功能的头文件,包括format。
您的环境变量设置看起来没有问题。但是为了确保正确性,您可以尝试在终端中运行以下命令:
LD_LIBRARY_PATH=/usr/local/llvm/lib/x86_64-unknown-linux-gnu ldd /path/to/your/program
请将/path/to/your/program
替换为您的编译后的程序路径。此命令将列出程序所依赖的所有库,确保libc++库被正确加载。
在cmakelists中添加了选项可以成功找到头文件,但是编译错误,您可以给出更具体的错误信息或代码片段,以便我们更好地帮助您。
总的来说,如果您遇到了格式库问题,您需要确保使用的是C++20及以上的标准(因为std::format
是在C++20中引入的)。另外,如果您正在使用clang编译器,则需要确保使用的是libc++而不是libstdc++。通常情况下,您只需要在编译命令中添加-stdlib=libc++
选项即可。
如果我的回答解决了您的问题,请采纳!
根据您提供的信息和截图,您的编译错误似乎是由于缺少头文件引起的。在C++20中,std::format是一个新的标准库特性,它包含在<format>头文件中。因此,您需要在代码中添加以下头文件:
#include <format>
然后,重新编译您的代码。如果您仍然遇到问题,建议您检查以下内容:
检查libc++库是否已经正确安装。您可以在终端中使用ldd --version命令来检查。
检查libc++库是否正确链接到您的项目中。您可以在CMakeLists.txt文件中确保libc++库已经添加到链接器选项中。
检查是否使用了正确的编译器版本和选项。在使用C++20标准库特性时,您需要使用支持C++20的编译器,并启用C++20选项。
希望这些提示能够帮助您解决问题
参考GPT和自己的思路:根据你提供的情况分析,可能是因为默认导入的c++11版本头文件与c++20版本的头文件冲突导致无法正确导入libc++。建议使用以下命令显式指定头文件路径:
clang++ -std=c++20 -I/usr/local/include/c++/v1 -I/usr/local/include test.cpp -o test
其中,-I
参数用于指定头文件路径,同时需要保证所有依赖的库都在正确的路径下。如果问题还未解决,可能需要检查libc++的版本是否支持c++20标准库。
基于最新版ChatGPT4的回答,望采纳!!!有其他问题也可以询问我哦💕(最新版更智能,功能更加强大):
根据你提供的信息,可能是因为在编译时没有将libc++的路径包含在include路径中。可以尝试将以下命令行参数添加到编译命令中:
-I/usr/local/include/c++/v1
这应该能够解决找不到format头文件的问题。
如果仍然出现找不到文件的错误,请确保__config_site文件在系统中存在,并且路径正确设置。你可以尝试使用以下命令查找此文件:
sudo find / -name __config_site
如果找到了这个文件,请确保它在include路径中,或者通过命令行参数添加到编译命令中。
该回答引用ChatGPT
以下是几个解决方案:
例如,在Xcode中,您需要在“Build Settings”面板中搜索“libc++”并确认此路径被正确设置。
如果您使用的是类Unix系统,可以在终端上运行以下命令确认安装:
sudo apt-get install libc++
在C++11标准之前的版本中,并没有支持全部C++11新特性的库。因此,如果你使用的是旧版本的编译器和库,可能会导致这个错误。在项目配置文件中设定使用C++11或更高的标准,或者更新您的编译器和/或库到新的版本。
如果以上方法都不可行,您可以尝试重新安装您的开发工具以及相关的库和SDK。
引用GPT:根据您提供的信息,无法准确判断问题的根本原因。以下是可能的解决方案:
1 检查您的 libc++ 安装是否正确。您可以尝试重新安装 libc++ 并确保它已正确配置。
2 确保您的编译器能够找到 libc++ 库和头文件。您可以尝试将 libc++ 库路径添加到 LD_LIBRARY_PATH 环境变量中,将 libc++ 头文件路径添加到 CPLUS_INCLUDE_PATH 环境变量中。
3 尝试使用 clang 命令进行编译,以便 libc++ 库和头文件可以正确链接。您可以尝试以下命令进行编译:
clang++ -std=c++20 -stdlib=libc++ -lc++ test.cpp -o test
请注意,这个命令假设 libc++ 库位于默认路径 /usr/lib 中。如果您的 libc++ 库位于其他路径中,请使用 -L 选项指定该路径。
4 如果以上方法均无效,请尝试重新编译 clang 和 libc++,并确保它们都使用相同的配置。这可能需要一些时间和精力,但可能是解决问题的最佳方法。
根据您提供的信息,可能是因为在编译过程中找不到所需的头文件,导致无法正确导入libc++。
在您的cmake命令中,可以尝试添加 -DCMAKE_INCLUDE_PATH 选项来指定包含路径,例如:
graphql
Copy code
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE="Release" -DLLVM_BUILD_EXAMPLES=ON -DLLVM_ENABLE_PROJECTS="clang;mlir;lld;lldb" -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" -DLLVM_ENABLE_LLD=ON -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLLVM_ENABLE_LLD=ON -DCMAKE_INCLUDE_PATH=/usr/local/include ../llvm
这里将包含路径指定为 /usr/local/include,可以根据实际情况进行调整。
另外,您可以尝试在编译命令中添加 -v 选项,这样可以查看编译器实际搜索头文件的路径,有助于解决问题。例如:
bash
Copy code
clang++ -std=c++20 -v -I/usr/local/include/c++/v1 test.cpp -o test
如果仍然无法解决问题,建议检查您的头文件路径是否正确,并确保所需的头文件已经正确安装。