问题标签 [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 投票
3 回答
3474 浏览

c++ - 将 LLVM JIT 代码链接到静态 LLVM 库?

我正在实施一个跨平台(Mac OS X、Windows 和 Linux)应用程序,它将对财务数据进行大量 CPU 密集型分析。出于速度原因,大部分分析引擎将用 C++ 编写,用户可访问的脚本引擎与 C++ 测试引擎交互。随着时间的推移,我想编写几个脚本前端来模拟其他流行的软件,并拥有大量的用户群。第一个方面将是类似 VisualBasic 的脚本语言。

我认为 LLVM 将非常适合我的需求。由于数据量巨大,性能非常重要;运行一次测试可能需要数小时或数天才能得到答案。我相信使用 LLVM 还可以让我使用单一的后端解决方案,同时随着时间的推移为不同风格的脚本语言实现不同的前端。

测试引擎本身将与界面分离,测试甚至会在单独的过程中进行,并将进度和结果报告给测试管理界面。测试将包括与测试引擎代码集成的脚本代码。

在我之前编写的类似商业测试系统的实现中,我构建了一个快速解释器,它可以轻松地与测试库交互,因为它是用 C++ 编写的并直接链接到测试引擎库。从脚本代码到测试库对象的回调涉及在格式之间进行转换,开销很大。

我在想象,使用 LLVM,我可以直接在 C++ 中实现回调,这样我就可以使脚本代码几乎像用 C++ 编写一样工作。同样,如果所有代码都编译为 LLVM 字节码格式,LLVM 优化器似乎可以跨脚本语言和用 C++ 编写的测试引擎代码之间的边界进行优化。

我不想每次都编译测试引擎。理想情况下,我想 JIT 只编译脚本代码。对于小型测试,我会跳过一些优化过程,而对于大型测试,我会在链接期间执行完整的优化。

那么这可能吗?我可以将测试引擎预编译为 .o 目标文件或 .a 库文件,然后使用 JIT 链接脚本代码吗?

最后,理想情况下,我希望脚本代码实现特定方法作为特定 C++ 类的子类。因此,C++ 测试引擎只会看到 C++ 对象,而 JIT 设置代码编译的脚本代码实现了对象的一些方法。似乎如果我使用正确的名称修饰算法,将脚本语言的 LLVM 生成设置为看起来像 C++ 方法调用会相对容易,然后可以链接到测试引擎。

因此,链接阶段将有两个方向,从脚本语言调用测试引擎对象以检索定价信息和测试状态信息,以及从测试引擎调用某些特定 C++ 对象的方法,其中代码不是从 C++ 提供的,而是从脚本语言。

总之:

1) 我可以在 JIT 编译、代码生成过程中链接预编译(.bc、.o 或 .a)文件吗?

2) 我是否可以使用上面 1) 中的过程链接代码,以便我能够创建代码,就像它都是用 C++ 编写的一样?

0 投票
2 回答
1689 浏览

xcode - 如何静态分析 C++ 和 Objective-C++ 代码?

“构建和分析”选项似乎不适用于 .cpp 和 .mm 文件。我在没有任何标准#includes 的单个文件上尝试了“clang --analyze”,它运行良好。但是我无法在我的 Xcode 项目上运行它。我想不出办法让铿锵声找到标准的#includes,甚至像UIKit.h。有什么线索吗?

0 投票
5 回答
3719 浏览

objective-c - 如何解决此 clang 警告:“返回 +0 保留计数的对象返回给预期 +1(拥有)保留计数的调用者”?

我有一段 Objective-C 代码,如下所示:

代码从如下所示的初始化程序调用:

运行 clang 静态分析器时,我收到以下path变量警告:

在第 41 行分配并存储到“路径”中的对象的潜在泄漏

具有 +0 保留计数的对象返回给调用者,其中预期 +1(拥有)保留计数

我很困惑。我的理解是stringByAppendingPathComponent应该返回一个自动释放的字符串,所以它的净保留计数应该是 0。(显然我不想保留它。)

我尝试更改copyData:以返回以下内容,但并没有消除警告:

那么这个警告是怎么回事呢?

0 投票
1 回答
429 浏览

llvm - 由 clang 1.1 和 1.0(llvm 2.7 和 2.6)生成的尾调用

使用 clang -O2 (或使用在线演示)编译下一段代码后:

我正在获得下一个 llvm 程序集片段flip

我认为这tail call意味着删除当前堆栈(即返回将是上帧,所以下一条指令应该是ret %5),但根据这段代码它会这样做mul。在本机汇编中,call没有尾部优化很简单(即使有适当的 llc 标志)

有人能解释一下为什么clang会生成这样的代码吗?

同样,我不明白为什么 llvmtail call可以简单地检查下一个ret将使用 prev 的结果,call然后进行适当的优化或生成与尾调用指令等效的本机?

0 投票
2 回答
4024 浏览

xcode - 如何禁用 Xcode 静态分析 (Clang) 消息?

我希望我的 Xcode 项目通过构建和分析步骤,而不会生成任何错误、警告或静态分析消息。一个问题是我的项目包含生成(可能是无害的)警告和静态分析消息的库。

我找不到禁用特定 Clang 警告的方法,以便“我的”代码构建时问题为零。这可能吗?

0 投票
2 回答
279 浏览

c++ - Clang 不支持锁定前缀。我该如何解决?

假设这段代码:

Clang 编译器不支持锁定前缀(还没有?)。我现在该怎么办?

0 投票
1 回答
1535 浏览

c++ - clang 应用程序的问题

我正在使用 clang 库构建一个应用程序,我遇到了一个问题,如果有人可以提供一些指导,这将非常有帮助。

#./a.out /home/nmathew/Desktop/algorithms/array.cpp

我的包含搜索目录如下。

#include "..."搜索从这里开始:
#include <...>搜索从这里开始:
/usr/include/linux
/usr/lib/gcc/i686-redhat-linux/4.4.3/include
/usr/include/c++/4.4.3
/usr/include/c++/4.4 .3/backward
/usr/include/c++/4.4.3/i686-redhat-linux
/usr/local/include
/usr/include
搜索列表结束。

并且 char_traits.h 在 /usr/include/c++/4.4.3/bits/ 中,我使用的是 Fedora 12 32 位系统。

我的代码在下面列出

tut01_pp.cpp

PPContext.h

数组.cpp

0 投票
7 回答
140192 浏览

optimization - Clang vs GCC - 产生更快的二进制文件?

我目前正在使用 GCC,但我最近发现了 Clang,我正在考虑切换。但是有一个决定性因素——它生成的二进制文件的质量(速度、内存占用、可靠性)——如果gcc -O3可以生成一个运行速度快 1% 的二进制文件,或者 Clang 二进制文件占用更多内存或只是由于编译器错误而失败,这是一笔交易-断路器。

与 GCC 相比,Clang 拥有更好的编译速度和更低的编译时内存占用,但我对生成的已编译软件的基准测试/比较非常感兴趣——您能指出一些预先存在的资源或您自己的基准测试吗?

0 投票
5 回答
16171 浏览

gcc - llvm-gcc 和 clang 二进制文件与 gcc 兼容吗?- 特别是 Windows 上的 mingw gcc

如果我用 llvm-gcc 构建一个静态库,然后将它与使用 mingw gcc 编译的程序链接,结果会起作用吗?

llvm-gcc、clang 和普通 gcc 的其他组合也是如此。我对这在 Linux(当然,使用普通的非 mingw gcc)和其他平台上的效果很感兴趣,但重点是 Windows。

我也对所有语言感兴趣,但特别强调 C 和 C++ - 显然 clang 不支持 Fortran 等,但我相信 llvm-gcc 支持。

我假设它们都使用 ELF 文件格式,但是调用约定、虚拟表布局等呢?

0 投票
5 回答
11397 浏览

c++ - 任何将 Clang 作为脚本解释器嵌入 C++ 代码的教程?

我还没有使用 llvm 或 clang 的经验。从我读到的 clang 据说很容易嵌入Wikipedia-Clang,但是,我没有找到任何关于如何实现这一点的教程。那么是否可以通过 JIT 在运行时编译和执行用户定义的代码来为 c++ 应用程序的用户提供脚本功能?是否可以调用应用程序自己的类和方法并共享对象?

编辑:我更喜欢脚本语言的类似 C 的语法(甚至 C++ 本身)