Articles of 铿锵

我不明白为什么编译器给我错误的代码

我有以下C代码,这对我来说看起来非常正确。 但是,clang编译器(实际上gcc或任何其他C编译器)则认为不然。 typedef struct { struct timeval td_start; struct timeval td_end; } Timer; void startTimer( struct Timer* ptimer ) { gettimeofday( &(ptimer->td_start), NULL ); } void stopTimer( struct Timer* ptimer ) { gettimeofday( &(ptimer->td_end), NULL ); } 编译器给出以下waring&error消息。 任何想法这里有什么不对? ./timing.h:14:25: warning: declaration of 'struct Timer' will not be visible outside of this function [-Wvisibility] void […]

铛错误 – 找不到stddef文件?

升级到Ubuntu 13.10“Saucy”之后,Clang现在给了我错误信息: clang -Wall -Werror -std=c99 -ggdb -O0 5.1.c -o 5.1 In file included from 5.1.c:1: /usr/include/stdio.h:33:11: fatal error: 'stddef.h' file not found # include <stddef.h> ^ 1 error generated. make: *** [5.1] Error 1 顺便说一下,我包括的头是stdio.h不是stddef.h但我假设stdio.h引用或#includes stddef.h

Clang / GCC真的支持延迟加载function吗?

如果您真的体验过与上述标题相关的内容,您是否愿意留下您的评论? 我试图做一个共享对象延迟加载与Clang和GCC在Ubuntu上(我其实不介意使用哪个编译器),但他们看起来不是真的支持任何延迟加载function(我期望延迟加载function把一个存根放到一个父对象中,这个父对象试图按需要加载另一个对象,此时需要这个function,但实际上并没有)。 以下命令显示我试图将libbar.so延迟加载到libfoo.so: clang bar.c -fPIC -shared -o libbar.so clang foo.c -Wl,-zlazy,lL'/path/to/where/lib/is',-lbar -o foo 如果libbar.so不存在,您将在input条目之前看到libfoo.so引发exception。 无论如何,我不介意上面的命令是否有错字,但是想知道Clang / GCC是否真的支持延迟加载function 。 但是就我个人而言,如果Clang / GCC不支持任何延迟加载特性,我不相信Linux程序开发者是否需要调用dlopen()或dlsym()来使共享对象延迟加载。 如果对象是用C编写的,但是如果用C ++编写的话,情况必须完全复杂: 我相信一个在编译器或链接器的帮助下实现的解决scheme是最好的,因为我已经成功地在Windows和Mac OS上完成了它。 所以我觉得这将是一个自然的反应,即使在Clang / GCC上,公民也希望拥有延迟加载function。 如果您对我的感受有任何评论,我也会很感激。 PS。 我知道Solaris支持延迟加载function,但这不是我的方式,因为我不会开发任何东西。 无论如何,非常感谢你提前。

是铿锵+ ABI相同的G + +?

可能重复: GCC 4.0,4.2和LLVM ABI兼容性 按照主题,都是C ++ ABI兼容吗? 也就是说,可以使用前者生成的二进制(Shared Object)并与后者连接(反之亦然)? 干杯

我如何告诉CMake在Windows上使用Clang?

我有一个使用CMake构build的C ++项目。 我通常build立在OSX上,但是现在我正在尝试使Windows版本工作。 为了兼容性的原因,我想在Windows上使用Clang。 我从LLVM安装了预编译的Clang 3.8二进制文件: C:\Program Files\LLVM\bin\clang.exe C:\Program Files\LLVM\bin\clang++.exe 它也安装在我的path上: >clang++ clang++.exe: error: no input files 我有两个问题: 当我调用cmake –build时,如何告诉CMake使用clang++ ? 在构buildCMake编译器之前如何检查?

铿锵C ++交叉编译器 – 从Mac OS X生成Windows可执行文件

我使用Clang编译器在Mac上创build了一个使用Xcode的C ++应用程序。 我想编译我的源文件来创build一个可以在Windows机器上运行的可执行文件,但是我不能让Clang生成一个可执行文件。 这是我试过的: clang++ -std=c++11 -stdlib=libc++ -arch x86_64 class1.cpp class2.cpp… -o executable.exe 这创build了一个可执行文件,但是这不能运行(Windows给了我一个与应用程序是16位的错误 – 不明白这一点,不能运行在64位) clang++ -std=c++11 -stdlib=libc++ -target i386-pc-win32 class1.cpp class2.cpp 由于某种原因,每当我使用-target标志,我得到一个错误,指出编译器找不到<iostream>标题,但从来没有呻吟任何其他时间。 我已经尝试使用-Ipath/to/iostreamfolder/然而这并没有产生任何更好的结果 任何build议将是伟大的! 谢谢! 我也试过'-triple x86-pc-win32'标志,但是我得到这个警告clang: warning: argument unused during compilation: '-triple x86-pc-win32'

如何将std = c ++ 11标志添加到clang-cl?

我试图用Windows下的clang-cl编译一个C ++ 11程序。 Clang-cl是clang的封装,与cl(Visual Studio编译器)更兼容。 我试图添加-std=c++11和/std=c++11 ,两者都被拒绝。 这并不奇怪,因为CL没有C ++ 11标志。 但是我不能在clang-cl中使用C ++ 11function。 如何在clang-cl中启用C ++ 11支持?