clion使用wsl不能导入环境变量

问题总结:pycharm clion使用wsl环境,可以编译但是运行不了,看起来像clion里没有子系统的环境变量,在终端可以运行,好像是这两个软件不能导入子系统自定义的环境变量

根据官方文档打开-fexperimental-library

img


成功识别format函数

img

**但是编译成功,运行时出错,连接不到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

为项目添加了环境变量依然失败

img

img

#添加环境变量TEMPORARY echo 'export TEMPORARY = /usr/local'>>/.bashrc
#添加WSL和Windows进程之间共享环境变量 echo 'WSLENV=$WSLENV:TEMPORARY /mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe'>>
/.bashrc

让共享变量在PowerShell中生效(临时的,所以每次都需要执行) source ~/.bashrc Windows PowerShell 版权所有 (C) Microsoft Corporation。保留所有权利。 尝试新的跨平台 PowerShell https://aka.ms/pscore6 PS Microsoft.PowerShell.Core\FileSystem::\wsl$\Ubuntu-20.04\root>

使用PowerShell打开clion & 'D:\JetBrains\apps\CLion\ch-0\223.8836.42\bin\clion.bat'

使用PowerShell打开pycharm & 'D:\PyCharm 2022.2.3\bin\pycharm.bat'

在CMakeLists.txt中,看下TEMPORARY这个变量有没有生效 message(“TEMPORARY: $ENV{TEMPORARY}”

问题描述不完整,缺少了一部分命令。但是从命令中可以看出,该命令是用于编译LLVM项目的。在编译LLVM项目时,需要使用libc++库,但是该命令无法正确导入libc++库,导致编译失败。
可能的原因有以下几点:
1. 缺少libc++库:在编译LLVM项目时,需要先安装libc++库,否则无法正确编译。可以通过以下命令安装:

sudo apt-get install libc++-dev

2. 编译选项错误:在编译LLVM项目时,需要正确设置编译选项,包括指定libc++库的路径等。可以尝试修改编译选项,例如:

-DCMAKE_CXX_FLAGS="-stdlib=libc++"
-DCMAKE_EXE_LINKER_FLAGS="-stdlib=libc++"
-DCMAKE_SHARED_LINKER_FLAGS="-stdlib=libc++"

3. 环境变量错误:在编译LLVM项目时,需要正确设置环境变量,包括指定libc++库的路径等。可以尝试修改环境变量,例如:

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/
该回答引用于gpt与OKX安生共同编写:
  • 该回答引用于gpt与OKX安生共同编写:

根据您提供的信息,问题似乎是找不到 libc++ 的头文件。这可能是由于在编译和构建 LLVM 时未正确配置 libc++ 的路径所致。

为了解决这个问题,您可以尝试使用 -DCMAKE_CXX_FLAGS=-nostdinc++ -I/usr/local/include/c++/v1 参数重新运行 cmake 命令,指定 libc++ 的 include 路径。在此之后,您需要重新编译和安装 LLVM,以确保 libc++ 的路径被正确引用。

如果问题仍然存在,您可以按照以下步骤进行排除故障:

  1. 确认 libc++ 是否已经正确安装,并且路径是否正确。

  2. 检查 cmake 命令中是否开启了 -DLLVM_ENABLE_LIBCXX=ON 选项来启用 libc++ 支持。

  3. 尝试使用 -v 参数运行编译器(例如 clang++),以查看编译器搜索路径是否包含 libc++ 的头文件路径。

希望这些信息能够帮助您解决问题。

  • 如果您要重新编译 LLVM,可以直接删除 build 目录并重新运行 cmake 命令进行构建。但是,如果您在先前的安装中使用了 make install 将文件安装到了 /usr/local 目录中,重新编译后会覆盖这些文件。这可能会导致意外行为或错误,因此最好在重新编译之前将旧版本的 LLVM 卸载。

您可以通过运行以下命令来卸载旧版本的 LLVM:

sudo make uninstall

注意,make uninstall 只能卸载先前使用 make install 安装的文件。如果您已手动安装其他文件,请确保也将其删除。

如果您想要保存当前版本的 LLVM,可以指定一个新的安装路径,例如 /usr/local/llvm-,以便在需要时轻松地从不同版本中进行选择。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据您的描述,可能存在以下几个问题:

  1. cmake命令中是否正确开启了libc++的format支持?

您的命令中添加了DLIBCXX_ENABLE_INCOMPLETE_FEATURES=ON来开启libc++对format的支持,这是正确的。请注意,在不开启该选项时,libc++将自动忽略具有未实现功能的头文件,包括format。

  1. 环境变量是否设置正确?

您的环境变量设置看起来没有问题。但是为了确保正确性,您可以尝试在终端中运行以下命令:

LD_LIBRARY_PATH=/usr/local/llvm/lib/x86_64-unknown-linux-gnu ldd /path/to/your/program

请将/path/to/your/program替换为您的编译后的程序路径。此命令将列出程序所依赖的所有库,确保libc++库被正确加载。

  1. 代码是否正确?

在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
以下是几个解决方案:

  1. 确认在项目配置文件中正确指定了C++运行时库的路径。

例如,在Xcode中,您需要在“Build Settings”面板中搜索“libc++”并确认此路径被正确设置。

  1. 确认C++运行时库已经正确安装。

如果您使用的是类Unix系统,可以在终端上运行以下命令确认安装:

sudo apt-get install libc++
  1. 确认使用的编译器支持C++11标准或更高标准。

在C++11标准之前的版本中,并没有支持全部C++11新特性的库。因此,如果你使用的是旧版本的编译器和库,可能会导致这个错误。在项目配置文件中设定使用C++11或更高的标准,或者更新您的编译器和/或库到新的版本。

  1. 重新安装开发工具

如果以上方法都不可行,您可以尝试重新安装您的开发工具以及相关的库和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
如果仍然无法解决问题,建议检查您的头文件路径是否正确,并确保所需的头文件已经正确安装。