草庐IT

c++ - 如何使用 clang 将我的 c++ 程序与 osx 上的 libstdc++ 静态链接?

我正在编写c++程序,我想在MacOSX10.6及更高版本上分发它。问题是当我用clang编译程序并且它与libstdc++动态链接时,它会导致旧系统出现问题。在gcc中有一个键-static-stdc++但在clang中没有。如何将我的程序与clang静态链接?我的主要目标是在MacOSX10.9上编译二进制文件并能够在早期版本上运行它。也许有不同的方式?谢谢。 最佳答案 在Linux下,此命令有效:clang--std=c++11-stdlib=libstdc++loopy.cpp-oloopy-static-lstdc++其中

c++ - 为什么我不能用 clang 编译这个程序?

我已经从here下载了Windows快照版本.我只是运行该可执行文件并编写以下简单的C++程序#includeintmain(){std::coutclang++999.cpp999.cpp:1:10:fatalerror:'iostream'filenotfound#include^1errorgenerated.这里出了什么问题?我缺少什么?我应该怎么做才能使用clang在Windows上成功编译我的C和C++程序? 最佳答案 clang的C++标准库没有Windows平台支持:http://libcxx.llvm.org/这就

c++ - 为什么 clang 拒绝 gcc 接受的这个 unordered_set 定义?

我想用我自己的哈希函数测试unordered_set:#include#include#includeusingnamespacestd;structnode{size_tvalue;booloperator==(constnode&n){returnvalue==n.value;}};size_th(constnode&n){returnn.value;}intmain(){unordered_set>s2(3,h);//failedreturn0;}我尝试编译它,但clang给出了大量错误:clang++m.cpp-std=c++11Infileincludedfromm.cpp:

c++ - 优化正在取消我在 clang 6 中的整数溢出检查

我有一些财务应用程序的定点实现。它基本上是一个包含在类中的整数,该类基于给定的小数位数N被视为十进制数。这个类很偏执,会检查溢出,但是当我在Release模式下运行我的测试时,它们失败了,最后我创建了这个演示问题的最小示例:#include#includetemplatetypenamestd::enable_if::value,T>::typeFromString(U&&str){std::stringstreamss;ss>ret;returnret;}intmain(){intNewAccu=32;intN=10;usingT=int64_t;Tl=10;Tr=FromStrin

c++ - 为什么 clang 不像 #define 那样优化全局常量?

我有这个测试程序,使用#define常量:#include#defineFOO1intmain(){printf("%d\n",FOO);return0;}当使用“AppleLLVM版本10.0.0(clang-1000.11.45.5)”编译时,我得到一个8432字节的可执行文件。这是程序集list:.section__TEXT,__text,regular,pure_instructions.build_versionmacos,10,14.globl_main##--Beginfunctionmain.p2align4,0x90_main:##@main.cfi_startpro

c++ - 在 GCC 工作正常的情况下使用 Clang 时无限递归模板实例化?

以下C++代码的目的是将三元运算符(?:)包装在一个单独的函数中,稍后将有助于构建语法树。在查看真正的C++代码片段之前,让我们快速看一下它在伪代码中的作用:boolrecursive(boolv){returnv?v:recursive(v);}intmain(){boolr=recursive(true)}不幸的是,当三元运算符(?:)包含在模板函数中时,Clang会在终止递归时遇到问题:/******************DECLARATIONS******************/templateconstexprTrecursive(Tt);structIfCase{tem

c++ - C++ 中的重载 lambda 以及 clang 和 gcc 之间的区别

我正在尝试在C++中重载lambda的技巧。具体来说://Forstd::function#include//Forstd::string#include//Forstd::cout#includetemplatestructoverload:F...{overload(F...f):F(f)...{}};templateautomake_overload(F...f){returnoverload(f...);}intmain(){std::functionf=[](intx,inty){returnx+y;};std::functiong=[](doublex,doubley){r

c++ - clang-format:如何防止下一行的所有函数参数?

我有一个C++函数调用,我手动和有意格式化为这个:DoSomethingForAPurposeThatCausesALongFunctionName(arg_0,arg_1,arg_2);clang-format想像这样重新格式化它:DoSomethingForAPurposeThatCausesALongFunctionName(arg_0,arg_1,arg_2)我不想要这个。AllowAllParametersOfDeclarationOnNextLine似乎控制函数声明的这种行为,但是函数调用呢?有相应的设置吗?我的.clang-format看起来像这样:BasedOnStyl

c++ - clang 和 gcc 之间对三元运算符的 const 引用地址的差异

我对这里发生的事情有一个模糊的想法...它与this有关但我想知道为什么clang++和g++以不同的方式处理这个问题。这里的未定义行为在哪里?注意:这与模板无关——我只是使用它们来使示例更紧凑。这都是关于whatever的类型。#include#includetemplatevoidtest(){Twhatever='c';constchara='a';std::cout();test();return0;}gcc输出(测试到4.9.3):begin:0x7fffe504201fref:0x7fffe504201fbegin:0x7fffe504201eref:0x7fffe5042

c++ - 自引用使用 unordered_map 会导致 gcc 5.3 出现问题但不会导致 clang

以下代码无法在gcc5.3下编译(它是从较大代码段中提取的缩减版本):#include#includeclassFoo{std::unordered_mapm;//"self-referential"};intmain(){Foof;return0;}有以下错误:g++--std=c++1y-crh.cppInfileincludedfrom/usr/local/include/c++/5.3.0/utility:70:0,from/usr/local/include/c++/5.3.0/unordered_map:38,fromrh.cpp:1:/usr/local/include/