Articles of clang ++

在Linux上为Mac交叉编译简单的标准C程序

在Linux下交叉编译Mac是一个主要的PITA。 要设置交叉编译,你需要一个苹果开发者账户,来自XCode的SDK等。我尝试过但是无法使它工作。 看来所有可用的说明都是过时的。 但我想编译的程序只是一个小型的shell工具,只需要一个标准的C库(最好是静态链接的glibc)。 没有Mac框架或Objective-C需要。 很容易为Windows编译这样一个二进制文件,而不是为OS X编译。它几乎看起来像缺less的是链接部分,因为可以像这样构buildmach-o对象文件: clang -target i386-apple-darwin-macho hello_world.c -o hello_world.o -c 但当然不是那么简单,因为这会产生一个错误: echo $'#ifdef __linux__\n#error "thinks it\'s for linux"\n#endif'| \ clang -xc – -o /dev/null -c 有什么办法可以在Linux下用unpatched clang编译Mac OS X的mach-o对象吗? 那么有没有办法链接这样的目标文件与Mac的静态glibc所以它在OS X下运行? 我在哪里可以得到这样一个glibc(我想我必须自己编译它)?

铿锵树莓派/ Raspbian错误?

当我尝试运行铿锵作为我的C编译器时,我得到一个错误(我认为一个链接器错误) Compilation started at Sun Nov 11 14:34:55 make -k clang -std=c99 -ggdb -o0 -Wall -Werror helloworld.c -o helloworld clang: warning: unknown platform, assuming -mfloat-abi=soft /usr/bin/ld: cannot find crt1.o: No such file or directory /usr/bin/ld: cannot find crti.o: No such file or directory clang: error: linker command failed with exit code 1 (use -v to […]

如何用clang / LLVM库编译C ++代码?

我是Linux的新手,并通过一些clang的教程。 但是,我发现很难编译一个简单的文件。 所以,这是代码的一部分: #include <cstdio> #include <string> #include <iostream> #include <sstream> #include <map> #include <utility> #include "clang/AST/ASTConsumer.h" #include "clang/AST/RecursiveASTVisitor.h" #include "clang/Basic/Diagnostic.h" #include "clang/Basic/FileManager.h" #include "clang/Basic/SourceManager.h" #include "clang/Basic/TargetOptions.h" #include "clang/Basic/TargetInfo.h" #include "clang/Frontend/CompilerInstance.h" #include "clang/Lex/Preprocessor.h" #include "clang/Parse/ParseAST.h" #include "clang/Rewrite/Core/Rewriter.h" #include "clang/Rewrite/Frontend/Rewriters.h" #include "llvm/Support/Host.h" #include "llvm/Support/raw_ostream.h" using namespace clang; using namespace std; 当我试图编译简单的代码(让我们说PrintFunctions.cpp)与以下命令: clang++ -o PrintFunctions PrintFunctions.cpp 我得到的错误: […]

找不到架构x86_64,macOS Sierra

背景: 是的,我知道使用Brew很容易! 已经testing和工作! 现在我正在试验MacOS Sierra ,并安装opendl的httpd-2.4.25.tar.gz 。 我没有Xcode的经验! $ openssl version OpenSSL 1.1.0c 10 Nov 2016 $ $ which openssl /usr/bin/openssl $ $ cd /etc/ServerWeb/httpd $ sudo ./configure –prefix=/usr/local/ServerWeb/httpd –enable-deflate –enable-so –enable-expires –enable-headers –enable-rewrite –with-apr=/etc/ServerWeb/httpd/srclib/apr –with-apr-util=/etc/ServerWeb/httpd/srclib/apr-util -with-pcre=/etc/pcre –with-z=/usr/include/zlib –enable-ssl –with-ssl=/etc/openssl 当我执行: $ sudo make 我得到这个错误! /etc/ServerWeb/httpd/srclib/apr/build-1/libtool –silent –mode=compile gcc -I/etc/openssl/include -g -O2 -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -DDARWIN_10 […]

将libc ++链接到Linux上的CMake项目

我想在Arch Linux的CMake项目中使用libc ++和clang。 我安装了libc ++,并在“在您的程序中使用libc ++”的Linux部分中的LLVM站点上提到了CMakeLists.txt的以下行: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++") set(CMAKE_EXE_LINKER_FLAGS "-lc++abi") 我已经在连接器的标志中试过“++ abi”,但是没有帮助。 我需要一些帮助来弄清楚我应该写在我的CMakeLists.txt中。

在NetBeans中集成Clang?

在NetBeans中集成Clang所涉及的步骤是什么? 我也想看到来自NetBeans内部的Clang错误和警告消息。 这将主要用于C中的开发。

相同版本的clang ++不同意Mint和Debian OSX之间直接向量初始化的有效性

我似乎已经写了一些代码在OSX(塞拉利昂)和Debian(稳定),与各种版本的铿锵++的预期工作,但不希望编译与相同版本的铿锵++的薄荷(肉桂)。 就我所知,这段代码是有效的C ++ 14(并且从我正在处理的更多的代码中浓缩): #include <iostream> #include <map> #include <vector> using frobs = std::map<int, int>; struct sampleData { frobs in; int out; }; int main(void) { std::vector<sampleData> tests{ {{}, 0}, {{{1, 2}}, 3}, }; for (const auto &tt : tests) { for (const auto &t : tt.in) { std::cout << t.first << "\n"; } } […]

Clang,LLVM和g ++

我安装了clang,将其用于一些C ++程序的g ++(gcc)。 如在,我比较编译时间,错误反馈等。 为同样的节目。 我这样做主要是为了正式的LLVM教程(使用LLVM实现编译器)。 有一次,我需要安装LLVM库(2.9版),而之前我只下载了铛声。 在此之后,使用clang ++进行编译似乎不适用于以下教程代码; 而g ++似乎与LLVM指令(例如,'llvm-config –libs'等)一起工作。 在安装这些库的同时,我还必须从我正在阅读的旧教程(llvm 2.2。,提示clang ++语法)到3.0的一个。 (提示g ++语法),因为库包含的位置已经改变。 我的问题解释下载llvm库后的变化: (1)当我现在键入'g ++'时,我是否仍然使用gcc,或者将llvm / clang设置为一个默认模仿gcc语法的新默认值? 如果是的话,我怎么能确保我真的使用gcc,而不是叮当呢? (2)如果g ++仍然是gcc,任何意见/猜测为什么官方clang / llvm教程切换build议使用自己的竞争编译器回gcc? (例如, 在这里 ) 我的系统: Ubuntu 12.04。 llvm 2.9。 gcc 4.6.3。 铿锵3.0。

如何debugging生成格式不正确的可执行文件的实验工具链

我正在使用clang (而不是gcc ), compiler-rt (而不是libgcc ), libunwind (可从http://llvm.org/git/libunwind.git获得 )交叉编译一个实验性的GNU免费的Linux工具链(而不是libgcc_s ), lld (而不是GNU ld ), libcxx (而不是libstdc++ ), libcxxabi (而不是确定,我不清楚libstdc++和它的ABI之间的GNU区别)和musl (而不是glibc )。 使用基于musl的gcc交叉编译器和一些补丁,我已经成功地编译了上述所有代码,并成功地编译并链接了一个简单的hello world C程序。 有些东西似乎出了问题,但是,运行hello world程序会导致分段错误: $ ./hello Segmentation fault $ 通常我会简单地用gdb进行debugging,但是这里存在这个问题: $ gdb ./hello Reading symbols from ./hello…Dwarf Error: Could not find abbrev number 5 in CU at offset 0x52 [in module /home/main/code/main/asm/hello] (no […]

在linux上用`libc ++`编译时未定义引用`__cxa_thread_atexit @@ CXXABI`

我试图在Arch Linux x64上使用libc ++ , libc ++ abi和clang ++ 3.6.0编译我的项目。 项目编译正确,但无法链接以下错误: 错误:CMakeFiles / main.cpp.o:未定义引用符号'__cxa_thread_atexit @@ CXXABI_1.3.7' /usr/lib/libstdc++.so.6:-1:错误:错误添加符号:命令行中缺lessDSO 我正在使用-stdlib=libc++ -lc++abi标志进行编译和链接。 有什么额外的图书馆我应该链接? 我错过了一面旗帜?