clang - sublimetext2 C++ 11代码用 `clang++` 编译,但不使用 `clang x c++`

  显示原文与译文双语对照的内容
133 1

基本问题

我有以下代码


#include <iostream>


#include <cstdint>


using namespace std;


int main ()


{


 int32_t spam;


 spam=5;


 cout <<"Hello World! We like" <<spam <<endl;


 return 0;


}



当我做 clang++ -stdlib=libc++ cpptest.cpp 时,这个编译很好。 然而,对于 sublime text 2的优秀SublimeClang解析器似乎并不理解它。 我想这可能是因为它使用 clang -x c++ 而不是 clang++,并尝试在上面编译我的代码 Fragment clang -x c++ -std=c++11 -stdlib=libc++ cpptest.cpp ( 或者不同的排列) 相反,但这失败了,对链接器的抱怨。

我的问题是 clang++clang -x c++的区别是什么? 是否可以使用 clang -x c++ 而不是 clang++ 来编译上面的代码 Fragment?

我的机器是一台运行 Mountain Lion的2012寸 MacBook Air 。

调试内容

现在回到工作中,我比较了这个,并比较了不同版本的详细输出。

调用 clang -x c++

当我跑步时 clang -v -x c++ -stdlib=libc++ cpptest.cpp 我知道


Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)


Target: x86_64-apple-darwin12.2.1


Thread model: posix


"/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.8.0 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name cpptest.cpp -pic-level 1 -mdisable-fp-elim -relaxed-aliasing -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 134.9 -v -resource-dir/usr/bin/../lib/clang/4.1 -fmodule-cache-path/var/folders/8m/b4wllzbs67d9zxcj1dd8q6912jclkf/T/clang-module-cache -stdlib=libc++ -fdeprecated-macro -fdebug-compilation-dir/Users/me/Desktop -ferror-limit 19 -fmessage-length 80 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime-has-arc -fobjc-runtime-has-weak -fobjc-dispatch-method=mixed -fobjc-default-synthesize-properties -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o/var/folders/8m/b4wllzbs67d9zxcj1dd8q6912jclkf/T/cpptest-1eOyZn.o -x c++ cpptest.cpp


clang -cc1 version 4.1 based upon LLVM 3.1svn default target x86_64-apple-darwin12.2.1


ignoring nonexistent directory"/usr/include/c++/v1"


#include"..." search starts here:


#include <...> search starts here:


/usr/bin/../lib/c++/v1


/usr/local/include


/usr/bin/../lib/clang/4.1/include


/usr/include


/System/Library/Frameworks (framework directory)


/Library/Frameworks (framework directory)


End of search list.


"/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.8.0 -o a.out/var/folders/8m/b4wllzbs67d9zxcj1dd8q6912jclkf/T/cpptest-1eOyZn.o -lSystem/usr/bin/../lib/clang/4.1/lib/darwin/libclang_rt.osx.a


Undefined symbols for architecture x86_64:


[snip]


ld: symbol(s) not found for architecture x86_64


clang: error: linker command failed with exit code 1 (use -v to see invocation)



调用 clang++

当我打电话时 clang++ -v -stdlib=libc++ cpptest.cpp 我得到以下信息。


clang++ -v -stdlib=libc++ cpptest.cpp 


Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)


Target: x86_64-apple-darwin12.2.1


Thread model: posix


"/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.8.0 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name cpptest.cpp -pic-level 1 -mdisable-fp-elim -relaxed-aliasing -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 134.9 -v -resource-dir/usr/bin/../lib/clang/4.1 -fmodule-cache-path/var/folders/8m/b4wllzbs67d9zxcj1dd8q6912jclkf/T/clang-module-cache -stdlib=libc++ -fdeprecated-macro -fdebug-compilation-dir/Users/me/Desktop -ferror-limit 19 -fmessage-length 80 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime-has-arc -fobjc-runtime-has-weak -fobjc-dispatch-method=mixed -fobjc-default-synthesize-properties -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o/var/folders/8m/b4wllzbs67d9zxcj1dd8q6912jclkf/T/cpptest-E7FTDV.o -x c++ cpptest.cpp


clang -cc1 version 4.1 based upon LLVM 3.1svn default target x86_64-apple-darwin12.2.1


ignoring nonexistent directory"/usr/include/c++/v1"


#include"..." search starts here:


#include <...> search starts here:


/usr/bin/../lib/c++/v1


/usr/local/include


/usr/bin/../lib/clang/4.1/include


/usr/include


/System/Library/Frameworks (framework directory)


/Library/Frameworks (framework directory)


End of search list.


"/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.8.0 -o a.out/var/folders/8m/b4wllzbs67d9zxcj1dd8q6912jclkf/T/cpptest-E7FTDV.o -lc++ -lSystem/usr/bin/../lib/clang/4.1/lib/darwin/libclang_rt.osx.a



差异和解决方案?

我可以找到的唯一区别是当我使用 -x c++ 标志运行of时,-lc++ 标志不会在以 "/usr/bin/lb" 开头的行中添加。 当我编译时 clang -v -lc++ -x c++ -stdlib=libc++ cpptest.cpp 我仍然不明白 clang++clang -x c++ 命令是如何不同的,但这似乎使我的示例程序编译成了不同的。

我的sublime text 2问题解决方案

这一整个 Bug 寻找都是我尝试了解如何让 sublime text 2停止抱怨我实际工作的代码。 需要做的只是按照这里的指令进行操作,并设置包括


/usr/lib/c++/v1


/usr/include/c++/4.2.1


/usr/include/c++/4.2.1/ext



SublimeClang.sublime-settings 文件中。

时间: 原作者:

87 5

对,只有连接阶段才有区别。 你可以使用-c标志来编译 clang,你将得到相同的结果。

然后添加-lc++标志,boths示例将出现在。

...