Clang有一个非常酷的扩展,名为block,将真正的lambda函数机制带给了C。与block相比,gcc的嵌套函数非常有限。但是,尝试编译一个琐碎的程序c.c
:
#include <stdio.h>
int main(){
void(^ hello)(void)= ^(void){
printf(“ Hello,block!\ n”);
};
你好();
返回0;
}
与clang -fblocks c.c
,我得到了
/usr/bin/ld.gold:/tmp/cc-NZ7tqa.o:在函数__block_literal_global:cc(.rodata + 0x10)中:错误:对'_NSConcreteGlobalBlock'的未定义引用
clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
似乎我应该使用clang -fblocks c.c -lBlocksRuntime
,但是后来我得到了
/usr/bin/ld.gold:错误:找不到-lBlocksRuntime
(其余与上述相同)
有什么提示吗?
在Ubuntu Linux上:
sudo apt-get install llvm
sudo apt-get install clang
sudo apt-get install libblocksruntime-dev
test.c
:
#include <stdio.h>
int main() {
void (^hello)(void) = ^(void) {
printf("Hello, block!\n");
};
hello();
return 0;
}
编译:
clang test.c -fblocks -lBlocksRuntime -o test
./test
Hello, block!
工作良好。
问题内容: 我正在上大学,并且对于一个正在使用C的项目,我们已经探索了GCC和Clang,并且Clang似乎比GCC更友好。结果,我想知道使用clang(相对于GCC)在Linux上用C和C ++进行开发有什么优点或缺点? 就我而言,这将用于学生级别的课程,而不是生产课程。 如果使用Clang,应该使用GDB调试并使用GNU Make,还是使用其他调试器和make实用程序? 问题答案: 编辑: 海
Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。 Clang 开发事出有因,Wiki 介绍如下: Apple 使用 LLVM 在不支持全部 OpenGL 特性的 GPU (Intel 低端显卡) 上生成代码 (JIT),令程序仍然能够正常运行。之后 LLV
我使用的是WSL(Windows Subsystem for Linux),版本是Ubuntu20.04 LTS。 显示错误: 我试过通过apt-get安装它,但没有安装候选。
问题内容: 在Linux中,尤其是在Debian或Ubuntu上,有预打包的Mingw交叉编译器可以生成Windows EXE。 但是是否有使用Clang而不是GCC的类似交叉编译器?(或有关如何建造这种野兽的说明。) 问题答案: 我编写了一个工具,可以在Linux上使用clang轻松地为Windows进行编译。检出: https //github.com/tpoechtrager/wclang。
clang-as-ios-dylib 是一个从 Xcode 中建立 iOS 动态库 的方法。它可以直接在 Xcode 中建立 iOS 动态库(iOS dylibs),而不需要在安装 Xcode 时候进行修改。使用起来很方便。
让我们举一个简单的例子: 取决于代码是什么,clang会抱怨或否。如果代码是: clang抱怨: 错误:Constexpr函数永远不会产生常量表达式[-Wvalid-Constexpr] 注意:非constexpr函数'运算符 /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../..//include/c/4.8/ostream:530:5:注意:此处声明