标签: llvm-clang

框架的私有模块映射

我正在使用这个答案创建一个模块映射来为CommonCrypto创建一个模块,这样我就可以在框架中使用它.

但是,这样做意味着我使用此框架的任何项目都可以访问CommonCrypto import CommonCrypto- 更糟糕的是,在另一个框架中声明CommonCrypto并将其导入项目会导致Redefinition of module 'CommonCrypto'错误.

即以下设置:

MainProject
    |--> import FrameworkA - module map for CommonCrypto
    |--> import FrameworkB - module map for CommonCrypto
Run Code Online (Sandbox Code Playgroud)

有没有办法创建模块映射,但是它创建/使用的是哪个框架是私有的?(很像internalSwift for Framework中的access属性).该LLVM锵文档显示private属性,但我不能工作在什么地方把这个在我的模块图,它甚至可能不是为了这个目的!还有一个export属性,但我再也不确定如何使用它......!

这是我用于CommonCrypto的模块映射 - $(SDKROOT)在构建阶段将其换出到正确的位置(对于iphoneosiphonesimulatorSDK):

module CommonCrypto [system] [extern_c] {
    umbrella header "$(SDKROOT)/usr/include/CommonCrypto/CommonCrypto.h"
    export *
}
Run Code Online (Sandbox Code Playgroud)

这工作正常(除了你不能"去定义"但我不介意)用于FrameworkA/ FrameworkB.

xcode frameworks dylib llvm-clang swift

16
推荐指数
1
解决办法
1万
查看次数

clang-format:如何将构造函数的初始值设定项列表的每个元素保留在单独的行上

我有一个这样的 C++ 类:

class A {
public:
    A() :
        m_a(someValue1),
        m_b(someValue2),
        m_c(someValue3)
    {
    }

    // .... other class members

private:
    A m_a;
    B m_b;
    C m_c;
};
Run Code Online (Sandbox Code Playgroud)

使用 clang-format 格式化此代码后,我得到:

class A {
public:
    A() :
        m_a(someValue1), m_b(someValue2), m_c(someValue3)
    {
    }

    // .... other class members

private:
    A m_a;
    B m_b;
    C m_c;
};
Run Code Online (Sandbox Code Playgroud)

即构造函数中的初始化列表被格式化为单行,直到达到他们允许的最大行长度。

我的问题是如何告诉 clang-format 将每个元素保留在自己的行上,就像在格式化之前在我的原始代码中一样?我找不到任何合适的参数。我尝试将参数 AllowShortBlocksOnASingleLine(在我看来是最合适的)设置为 true 和 false,但这对此没有影响。那么有人可以建议如何实现这种格式吗?

这是我的 .clang 格式:

BasedOnStyle: Google
AccessModifierOffset: '-4'
AlignAfterOpenBracket: DontAlign
AlignConsecutiveAssignments: 'false'
AlignConsecutiveDeclarations: 'false'
AlignEscapedNewlines: Left
AlignOperands: 'true'
AlignTrailingComments: …
Run Code Online (Sandbox Code Playgroud)

c++ llvm-clang clang-format

16
推荐指数
2
解决办法
5290
查看次数

llvm并安装时间优化

基于LLVM官方页面,可以根据我的理解进行安装时优化,首先在分发之前编译到构建机器上的字节码,然后在目标机器上,在安装时将字节码转换为本机代码.

这个功能有没有真实世界的例子?更具体地说,我想知道是否有可能采用任意开源C/C++项目,该项目使用autoconf(即通常由其构建和安装./configure && make && make install),以及

  1. 在构建机器上,通过./configure && make以特殊方式运行(例如,设置一些环境变量,甚至修改configure.ac或其他一些autoconf文件),以便它生成可执行文件和库作为字节代码;
  2. 我将构建树转移到目标机器,并make install 以特殊方式运行,以便像往常一样安装所有文件,但将字节代码转换为可执行文件和库的本机代码.

c++ llvm llvm-clang

15
推荐指数
1
解决办法
517
查看次数

为什么Clang不带标准库头?

我从这个网站下载了Clang 3.6.2,并尝试使用Windows下的Code :: Blocks进行设置.不幸的是,由于它不知道在哪里,它无法编译一个简单的"hello world"程序iostream.

查看安装文件夹,它似乎没有包含标准库.为什么?我怎么得到它?

c++ clang standard-library llvm-clang

15
推荐指数
1
解决办法
7476
查看次数

为什么objective-c没有API可用性检查?

Swift 2有API 可用性检查.

当您使用对于最小目标操作系统来说太新的API时,编译器会给您一个错误

为什么objective-c编译器不能做等效的?

我google了目标c API可用性检查,只有swift 2结果出来,所以我假设目标c的编译器不能这样做.

objective-c llvm-clang

15
推荐指数
2
解决办法
1万
查看次数

使用Clang将OpenCL编译为PTX时未解决的extern?

我按照这个SO答案的说明但是当我尝试运行生成的PTX文件时,我在clBuild中得到了跟随错误

ptxas fatal   : Unresolved extern function 'get_group_id'
Run Code Online (Sandbox Code Playgroud)

在PTX文件中,我使用的每个OpenCL函数调用都有以下内容

.func  (.param .b64 func_retval0) get_group_id
(
        .param .b32 get_group_id_param_0
)
;
Run Code Online (Sandbox Code Playgroud)

当我提供一个CL文件时,OpenCL运行时创建的PTX文件中不存在上述内容.相反,它有适当的特殊寄存器.

遵循这些说明(链接到不同的libclc库)在LLVM IR到PTX编译期间给出了分段错误,并出现以下错误:

fatal error: error in backend: Cannot cast between two non-generic address spaces
Run Code Online (Sandbox Code Playgroud)

这些说明仍然有效吗?还有什么我应该做的吗?

我使用的是最新版本的libclc,Clang 3.7和Nvidia驱动程序352.39

clang opencl llvm-clang

14
推荐指数
1
解决办法
363
查看次数

Windows上的Clang/LLVM 7.0.1多次初始化内联静态数据成员

Windows上的Clang/LLVM 7.0.1 每个TU初始化一次内联静态数据成员.据我所知,C++ 17这是不正确的.

尽管可以在多个TU中定义内联变量,但编译器和/或链接器必须确保它在程序中仅存在一次,因此仅初始化一次.就像多重定义的内联函数一样,在程序中只存在一次.请参阅以下小程序:

// header.h

#include <iostream>

struct A
{
  A()      { std::cout << "ctor " << this << std::endl; }
  ~A()     { std::cout << "dtor " << this << std::endl; }
  void f() { std::cout << "f " << this << std::endl;  }
};

struct S
{
  inline static A a; // C++17 inline variable, thus also a definition 
};
Run Code Online (Sandbox Code Playgroud)

// TU1.cpp

#include "header.h"

int main()
{
  S::a.f();
}
Run Code Online (Sandbox Code Playgroud)

// TU2.cpp

#include "header.h"
Run Code Online (Sandbox Code Playgroud)

// …

c++ clang llvm-clang c++17

13
推荐指数
1
解决办法
453
查看次数

什么是间接goto语句?

在Clang API中,有GotoStmtIndirectGotoStmt。关于这两种goto陈述之间的区别,几乎没有解释。我知道这goto label;是什么声明。但是什么是间接goto语句?我想知道C / C ++代码上下文中的含义,而不仅仅是Clang。拥有间接goto语句在语法上意味着什么?您可以提供一个代码示例吗?

编辑:以下问题很有趣。

你可以用C ++进行计算后的goto吗

c c++ goto llvm-clang

12
推荐指数
1
解决办法
384
查看次数

什么是与Xcode捆绑在一起的LLVM版本?

在键入时,clang --version我们获得了有关它所构建的LLVM版本的信息:

Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Run Code Online (Sandbox Code Playgroud)

但是现在使用Xcode 7我们只得到以下内容:

Apple LLVM version 7.0.0 (clang-700.0.72)
Run Code Online (Sandbox Code Playgroud)

llvm clang llvm-clang clang++ xcode7

11
推荐指数
1
解决办法
5115
查看次数

变得铿锵有力地修复头文件

我正在将当前使用gcc编译的项目移动到clang,并且有一堆gcc没有生成的警告(-Winconsistent-missing-override).clang-tidy用于修复*.cpp文件中的这些错误,但它不会触及hpp文件,因为在数据库中找不到编译命令(正如我所料).

我正在使用ninja构建项目并ninja -t compdb cc cxx > .build/compile_commands.json生成编译数据库.我试过跑:

clang-tidy-3.6 -p .build/      \
      $(find src/ -name *.cpp) \
      $(find src/ -name *.hpp) \
      --checks=misc-use-override --fix
Run Code Online (Sandbox Code Playgroud)

修复错误.它拒绝触摸头文件抱怨:

Skipping .../src/header/file.hpp. Compile command not found.
Run Code Online (Sandbox Code Playgroud)

c++ automated-refactoring llvm-clang clang++ clang-tidy

11
推荐指数
1
解决办法
1万
查看次数