问题标签 [llvm-clang]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7288 浏览

xcode - 在 Xcode 新项目中启用 LLVM + Clang 会导致链接错误

我已经完成了 XCode 的彻底卸载并删除了 prefs 并删除了完整的 /Developer 文件夹并再次重新安装了 XCode。

我创建了一个新的 Cocoa 应用程序,转到 Target,在目标中执行“获取信息”并将“C/C++ 编译器版本”启用为“LLVM 编译器 1.0.2”,然后按 Build。

我得到:

有人可以在这里帮助我吗?LLVM + GCC 前端确实可以工作,但我真的很想使用 Clang(LLVM 编译器 1.0.2)。新的 XCode 安装,新的 Cocoa 项目仍然有这个问题。

0 投票
3 回答
1394 浏览

objective-c - 核心数据、协议和读写与只读属性声明的怪癖

我遇到了一个奇怪的怪癖,涉及核心数据、声明的协议,也许还有 LLVM 1.5 编译器。这是情况。

我有一个核心数据模型,其中有两个类,IPContainer 和 IPEvent,其中 IPContainer 是 IPEvent 的父实体。每个实体在项目中都有一个自定义类,使用 mogenerator 创建。mogenerator 会生成一个仅包含建模属性声明的附加子类,因此类层次结构实际上是 IPEvent > _IPEvent > IPContainer > _IPContainer > NSManagedObject。IPContainer 实体有一个名为“id”的属性,它@property(nonatomic, retain) NSNumber* id;在 _IPContainer.h 中声明。_IPContainer.m@dynamic id;在实现中,告诉 Core Data 在运行时生成访问器

我的项目中还声明了一个协议 IPGridViewGroup,它定义了几个属性,其中一个是相同的“id”属性。但是,实现此协议的类不需要 setter,因此协议中的属性声明为@property(readonly) NSNumber* id; IPEvent 类声明它符合 IPGridViewGroup 协议。

使用 Clang/LLVM 1.0.x 编译器(无论 Xcode 3.2.2 附带的哪个版本)都可以正常工作,但是在升级到 Xcode 3.2.3 和 Clang/LLVM 1.5 后,一大堆事情发生了变化。首先,我在编译 IPEvent 类时收到以下警告:

然后,当我实际运行程序时,它会在控制台中打印出来:

紧随其后的是:

我还尝试在 IPEvent 类上重新声明该属性,但这只是给了我一个不同的编译器警告,并且在运行时有相同的行为:

现在,这里唯一改变的是编译器,所以改变的催化剂很清楚,但我不知道这是否可以被认为是新版本编译器的错误,或者如果旧版本的编译器实际上表现不正确,而新版本现在显示这是我自己的代码有问题。

所以我在这里的问题包括:

  1. 看起来应该可以让一个类符合具有只读属性的协议,但在其自己的实现中为该属性提供读写访问权限,对吗?不过这里的怪癖是 readwrite 属性实际上是在符合协议的类的超类中声明的。
  2. 我假设控制台消息正在核心数据内部的某个地方打印出来。不过这很奇怪,因为 IPEvent 本身并没有明确声明“id”属性,除非符合 IPGridViewGroup 协议。但是,如果是这种情况,那么我认为会出现编译器错误,因为它会有效地使用相同属性的只读版本覆盖读写属性(在 _IPContainer 超类中声明),AFAIK 通常是不允许的.
  3. 如果这是一个编译器错误,那很好,我现在可以通过几种不同的方式解决它。如果编译器在这里做正确的事情,那么我将无法想出一种方法来组织所有这些,因此我不会收到任何编译器警告或运行时错误。

编辑:所以,解决方法是在 IPEvent 类上再次重新声明该属性,但我仍然对为什么两个版本的编译器行为不同感到困惑。还不清楚协议上声明的属性应该如何与类上声明的属性进行交互。

如果我在覆盖读写属性的类(而不是协议)中声明只读属性,我会收到消息“警告:属性'经度'的属性'只读'限制从'_IPEvent'继承的属性的属性'读写'”。似乎如果在协议中声明它具有相同的效果,编译器应该会出现类似的警告。

直观地说,我认为由于 IPEvent 已经为该属性实现了必要的 getter,这应该算作“符合协议”,即使它碰巧也为该属性实现了一个 setter。

0 投票
1 回答
229 浏览

xcode - Xcode 3 中的 clang 版本是什么?

我如何确定 Xcode 使用哪个版本的 clang?

它在 Xcode 中是 1.5,但官方的 llvm-clang 是 2.7。他们是一样的吗?

0 投票
4 回答
3982 浏览

objective-c - 实现Objective-C的根类需要什么?

我试过这段代码:

使用没有任何框架的 LLVM/Clang,编译时不会出现以下错误:

所以我加了libobjc.dylib。代码已编译,但抛出此运行时异常:

我意识到根类需要一些实现,但我不知道下一步该怎么做。创建一个新的根类需要什么?对此有什么规范吗?

0 投票
2 回答
994 浏览

c++ - Clang 的意外输出

我一直在测试 clang-llvm,看看是否值得向我学校的 IT 部门提及以将其添加到我们学生编程的机器上。对于我们所有的作业,我们都需要使用 编译g++ -Wall -W -pedantic-errors *.cpp,所以我只是将命令转换为clang++ -Wall -W -pedantic-errors. 我得到了一些我没想到的输出:

而 GCC 编译器不会给出关于 catch 块中未使用变量的错误。有什么我可以做的,以使 Clang 不会对 try/catch 块中未使用的变量感到害怕,同时保持与 g++ 相似的命令?

Clang-LLVM(v2.7) GNU GCC(v4.4.4) Fedora 13

0 投票
2 回答
10083 浏览

c++ - 链接到 clang-llvm

我一直在使用 clang/llvm 开发一个小工具,但我无法成功地让 g++ 和 gnu 的链接器正确地将我的代码与 clang 链接起来。

我的链接器正在生成以下错误:

我的编译命令如下所示:

欢迎任何提示或建议。

干杯,ct

PS:我一直在探索这个页面上的一些信息:

http://ubuntuforums.org/showthread.php?t=532693

它可能会奏效,我会在可能的情况下对该提示发表评论。

解决方案

使用本教程中的 clang 代码(必须对其进行修改以删除对 FileSystemOptions b/c clang/Basic/FileSystemOptions.h 的引用在 clang-2.8 中不存在):http ://clangtutorial.codeplex.com/

似乎成功了!

0 投票
1 回答
2420 浏览

xcode - 如何使用“用户标题搜索路径”让 Xcode 正确找到标题?

我正在尝试使用 Xcode 从 libFLAC 构建一个框架,以在我自己的 Mac OS X 应用程序中使用。

我使用这些 FLAC 资源:

http://sourceforge.net/projects/flac/files/flac-src/flac-1.2.1-src/flac-1.2.1.tar.gz/download

我只需要其中的一些源文件,但我宁愿保持一切原样,这样如果我想用我自己的源分发框架项目,我就可以保留原始的 FLAC 源。

flac-1.2.1.tar.gz 包含以下目录:

为了构建 libFLAC,我将 'flac-1.2.1/src/libFLAC' 中的 .c 文件添加到项目中(作为参考)。我还添加了 .h 文件。

源代码中使用的标头位于:

例如,标头的源代码调用是:

等等

在 Xcode 中,我已将这些“用户标头搜索路径”添加到目标构建设置中:

当然,我已经将我的 flac-1.2.1 目录放在了正确的位置。

当我想编译时,编译器找不到头文件。我尝试使用 GCC 4.2 和 LLVM 编译器 2.0。我究竟做错了什么?我应该做更多的事情吗?

我是在我的其他全 ObjC 项目中导入 C 源代码的新手,我很乐意尝试你扔给我的任何东西。请避免回答“如果你做不到,你就不应该这样做”。我需要学习这个,我会的。

0 投票
2 回答
1316 浏览

objective-c - LLVM 编译器 2.0 上的 -fobjc-nonfragile-abi2:未知参数?

我尝试使用 LLVM 编译器 2.0 在 Xcode 上构建我的项目,它给出了这个错误:

我不熟悉 LLVM 编译器,有人有解决方案吗?

删除参数并不能解决我的问题,因为我的代码在这种情况下有错误。

0 投票
1 回答
879 浏览

llvm - 使用 Clang 编译为 LLVM IR 时如何保留结构成员标识符?

假设我有以下 C 结构定义:

对于上述情况,Clang 生成以下 LLVM IR:

...包括我定义中的所有内容,除了变量 identifier stringVariable

我想找到某种方法将标识符导出到生成的 LLVM IR 中,以便我可以从我的应用程序(使用 LLVM C++ API)中按名称引用它。

我试过添加annotate属性,如下:

...但是注释似乎没有通过(结构仍然只是定义为type { i8* })。

有任何想法吗?

0 投票
1 回答
1375 浏览

llvm - clang-2.9 crt1 未找到错误

刚刚编译了 clang-2.9 版本,它无法链接一个 hello world 示例。有错误:

LLVM 配置为默认 + --enable-shared。具有相同选项的 llvm-2.8 构建在同一台机器上正常工作。

同样的错误在这里http://permalink.gmane.org/gmane.comp.compilers.clang.devel/12101http://comments.gmane.org/gmane.comp.compilers.clang.devel/14269http ://permalink.gmane.org/gmane.comp.compilers.llvm.bugs/11352

与 llvm-2.8 比较时我可以学到什么——新版本尝试自己组装文件,旧版本调用 gcc 来执行组装和链接步骤。

拜托,这不是clang 链接器问题的重复,因为我无法编辑 LLVM 的源,所以接受的解决方案对我没有用。