标签: llvm-clang

铿锵不工作。未定义的符号错误。代码在 gcc 中编译良好

我决定尝试一下 Clang,因为我听说了它的好消息,并且我想尝试一些 C++11 功能。所以,像往常一样,我从一个简单的 hello world 程序开始。

#include <iostream>
using namespace std;

int main()
{   
    cout << "Hello, world" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用 GCC 编译得很好的东西不能在 Clang 中编译。相反,我收到此错误。

Apple clang version 4.1 (tags/Apple/clang-421.11.65) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin12.2.0
Thread model: posix
 "/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.8.0 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name test.cpp -pic-level 1 -mdisable-fp-elim -relaxed-aliasing -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 134.9 -v -resource-dir /usr/bin/../lib/clang/4.1 -fmodule-cache-path /var/folders/js/j_8fpm_j0vl1d_2r_lsxlddm0000gn/T/clang-module-cache -fdeprecated-macro -fdebug-compilation-dir /Users/alexanderstein/Desktop/build -ferror-limit 19 -fmessage-length 80 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime-has-arc …
Run Code Online (Sandbox Code Playgroud)

c++ clang llvm-clang

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

LLVM IR Lambda 函数

我使用 clang++ 3.4 将 C++11 程序 (test.cpp) 编译为 LLVM IR 文件 (test.ll)。该程序包含多个 C++ lambda 函数,我想知道是否可以使用如下技术仅提取 lambda 函数的 IR:

Module *mod = ParseIRFile("test.ll", *err, ctx);
for (Module::iterator f = mod->begin(); f != mod->end(); ++f) {
    //is there some function like isLambdaFunction()?
    if (f->isLambdaFunction()) { 
        cout << "Lambda Function" << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

lambda llvm llvm-clang c++11 llvm-c++-api

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

如何在 Visual Studio 中使用 LibTooling/Clang?

我正在尝试使用 LibTooling 替换 C 代码文件中的函数和变量名称。因此,我下载了 llvm 并按照说明使用 GMake 和 Visual Studio 2015 在 Windows 中进行设置。

有许多教程(例如教程)我想遵循,但它们都假设您使用的是 Linux/Make,因此它们提供了一个 Makefile,以某种方式管理与 llvm 源代码的集成。

我想要做的是在 Visual Studio 中使用这些示例,但我不知道从哪里开始 - 我可以在给定的 (llvn.sln) 解决方案中创建一个新项目并在那里添加代码吗?我如何告诉 Visual Studio 包含 clang 源(如我提到的那些 Makefile 中所定义)?

cmake clang visual-studio llvm-clang libtooling

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

使用 llvm 库构建时如何链接?

我正在尝试解析 LLVM-IR 文件(.ll)并进行静态分析。

我在下面找到了这个示例代码,我尝试构建它,但我不知道要链接哪个库。

#include <iostream>
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/IRReader/IRReader.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/raw_ostream.h"

using namespace llvm;

int main(int argc, char** argv)
{
    if (argc < 2) {
        errs() << "Expected an argument - IR file name\n";
        exit(1);
    }

    LLVMContext &Context = getGlobalContext();
    SMDiagnostic Err;
    std::unique_ptr<Module> Mod = parseIRFile(argv[1], Err, Context);

    if (Mod) {
        std::cout << "Mod is not null" << std::endl;
    }
    else {
       std::cout << "Mod is null" << std::endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我给出了下面的命令来构建,它给了我一些未定义的参考错误,我认为这是一个链接错误。

g++ …
Run Code Online (Sandbox Code Playgroud)

compiler-construction static-analysis llvm llvm-clang llvm-ir

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

带有 CUDA 内联汇编的 LLVM

我正在尝试使用以下内联程序集编译 CUDA 代码:

static __device__ uint get_smid(void) {
    uint ret;
    asm("mov.u32 %0, %smid;" : "=r"(ret) );
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

nvcc带有标志的代码编译得很好-Xptxas -v

当我尝试使用clang++(版本 4.0)和相应的标志-Xcuda-ptxas -v(我认为这是正确的,但我可能错了)编译它时,出现以下错误:

../../include/cutil_subset.h:23:25: error: invalid % escape in inline assembly string asm("mov.u32 %0, %smid;" : "=r"(ret) );

它指向%smid.

我想我应该链接正确的库,但我也有这个:L/cuda/install/lib.

另一种可能是 NVPTX asm 不兼容。在这个页面上,解释了 LLVM 对所有 PTX 变量都有不同的定义(smid 和 warpid 也有一些)。现在,如果提到的代码必须单独(不是内联)编写和编译,我会迷失方向。

有没有人以前处理过类似的问题?欢迎提出建议。

c++ cuda llvm-clang

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

当给定 IR 文件时,如何使 LLVM opt 输出 IR 文件?

我使用 LLVMopt来运行 pass,例如使用opt -load libMyPass.so my-pass foo.ll > foo1.ll.

foo.ll是一个 IR 文件,我想foo1.ll以 IR 格式包含运行该过程的结果。但foo1.ll变成了位码文件,所以我需要将llvm-dis foo1.ll其转换为 IR 格式。

如何避免运行llvm-disopt从 IR 格式转换为 IR 格式?

c++ compilation llvm llvm-clang

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

eBPF:全局变量和结构

所以我有一个简单的eBPF代码:

我的.h:

#ifndef __MY_COMMON_H__
#define __MY_COMMON_H__

#include <linux/types.h>

struct foo {
        int a;
        int b;
        int c;
        int d;
};

#endif  /* __MY_COMMON_H__ */
Run Code Online (Sandbox Code Playgroud)

my_kern.c:

...
struct bpf_map_def SEC("maps") my_map = {
        .type = BPF_MAP_TYPE_HASH,
        .key_size = ...,
        .value_size = ...,
        .max_entries = MAX_ENTRIES,
};

struct foo my_foo = {
        .a = 150000,
        .b = 100,
        .c = 10,
        .d = 40,
};

SEC("sockops")
int my_bpf(struct bpf_sock_ops *sk_ops)
{
   ...

};

char _license[] SEC("license") = "GPL";
u32 _version …
Run Code Online (Sandbox Code Playgroud)

networking linux-kernel llvm-clang bpf

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

为什么LLVM项目使用GCC Headers

我正在查看一个使用 Clang 构建的项目,但它需要 GCC 标头。

为什么一个项目需要 Clang 和 GCC 头文件?

gcc llvm clang llvm-clang clang++

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

LLVM 可以用于生成优化的 C 代码吗

是否可以使用 LLVM 读取 C 代码并使其更快?我已经看到很多关于使用 LLVM 将 C++ 转换为(不可读的)C 代码的讨论,但我想知道 LLVM 是否可以读取 C 代码,并生成一个具有相同功能的文件(代码,而不是可执行文件)速度更快。

c llvm llvm-clang llvm-c++-api

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

如何在 x64 主机上为 AArch64 交叉编译 LLVM/Clang?

我想在运行 Ubuntu 20.04 Focal 的 AArch64 Raspberry Pi 4 上使用 clang-11。我查看了https://apt.llvm.org/,但 AArch64 预构建二进制文件似乎不可用?

我尝试直接在 Raspberry Pi 上构建 clang,但速度非常慢,最终我的 SD 卡空间不足。

我如何在 x64 笔记本电脑上自己交叉编译 clang?

cross-compiling llvm-clang arm64 raspberry-pi4

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