什么时候需要使用-stdlib=libstdc++gcc编译时使用编译器和链接器的标志?
编译器是否自动使用libstdc ++?
我在Ubuntu 13.10上使用gcc4.8.2,我想使用c ++ 11标准.我已经传递-std=c++11给了编译器.
这个问题已被问过并回答过很多次,但似乎没有一个答案对我有用。
我一直在尝试clangd在 nvim lsp 中进行设置。我使用bear来生成compile_commands.json,但 clangd 仍然给我错误,告诉我它找不到标准库头。这是一个最小的例子:
主要.cpp:
#include <iostream>
using namespace std;
int main(){
cout << "hello clangd";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我运行:bear -- g++ main.cpp,它编译并创建一个compile_commands.json包含以下内容的文件:
[
{
"arguments": [
"/usr/bin/g++",
"-c",
"main.cpp"
],
"directory": "/home/xxx/tmp/hello_clangd",
"file": "/home/xxx/tmp/hello_clangd/main.cpp"
}
]
Run Code Online (Sandbox Code Playgroud)
我还尝试使用 cmake 标志进行编译来生成compile_commands.json,但我遇到了同样的问题。我可以获取该文件,但语言服务器仍然无法正常工作。
我已经能够将 clang 与vim-pio 一起使用,所以看起来它没有损坏。我缺少什么。
编辑:顺便说一句,我在 ubuntu 上
我编写了以下简单的 C++ 程序:
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我用 g++ 编译它时,它工作得很好。当我尝试使用 Clang++ 进行编译时,出现以下错误:
main.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
^~~~~~~~~~
1 error generated.
Run Code Online (Sandbox Code Playgroud)
使用-v参数运行,我看到以下内容:
ignoring nonexistent directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/backward"
ignoring nonexistent directory "/include"
ignoring duplicate directory "/usr/include/clang/6.0.0/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++
/usr/include/clang/6.0.0/include
/usr/local/include
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
Run Code Online (Sandbox Code Playgroud)
分别查看这些文件夹,我发现在/usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++(或更简洁地说,在/usr/include/c++ …
我刚刚从https://github.com/llvm/llvm-project.git安装了 clang++ 和 libc++ 。尝试运行时:
clang main.cpp -stdlib=libc++ -lc++abi
Run Code Online (Sandbox Code Playgroud)
其中main.cpp:
#include <iostream>
int main() {
std::cout << "main>" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
main.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
Run Code Online (Sandbox Code Playgroud)
-v 选项的输出:
clang version 9.0.0 (https://github.com/llvm/llvm-project.git 40046bc8430f0b90d76cef9e6cc62ccc2abcb0b0)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/6
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/6.3.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/6
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/6.3.0
Found …Run Code Online (Sandbox Code Playgroud) 我试图运行Ale作为我的linter,然后使用clang-check来lint我的代码.
$ clang-check FeatureManager.h
Error while trying to load a compilation database:
Could not auto-detect compilation database for file "FeatureManager.h"
No compilation database found in /home/babbleshack/ or any parent directory
json-compilation-database: Error while opening JSON database: No such file or directory
Running without flags.
/home/babbleshack/FeatureManager.h:6:10: fatal error: 'unordered_map' file not found
#include <unordered_map>
^~~~~~~~~~~~~~~
1 error generated.
Error while processing /home/babbleshack/FeatureManager.h.
Run Code Online (Sandbox Code Playgroud)
而使用clang ++进行编译只会返回一个警告.
$ clang++ -std=c++11 -Wall FeatureManager.cxx FeatureManager.h
clang-5.0: warning: treating 'c-header' input as 'c++-header' when in C++ mode, …Run Code Online (Sandbox Code Playgroud)