导出 C++ LLVM 位码的类

发布于 2024-11-17 00:10:11 字数 287 浏览 2 评论 0原文

有没有可能将 C++ 类编译成 LLVM 位码? 每当我使用 clang -emit-llvm -c MyClass.cpp -o MyClass.bc 编译这样的类时,

class MyClass {
public:
MyClass {};
int i() { return 0; };
};

生成的位码文件似乎是空的: llvm-nm MyClass.bc code> 不返回任何内容。

有什么办法可以让这个工作吗?

干杯,

曼努埃尔

is there any possibility to compile a C++ class into LLVM bitcode?
Whenever I compile a class like this

class MyClass {
public:
MyClass {};
int i() { return 0; };
};

using clang -emit-llvm -c MyClass.cpp -o MyClass.bc the resulting bitcode file seems to be empty: llvm-nm MyClass.bc does not return anything.

Is there any way to make this work?

Cheers,

Manuel

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吻泪 2024-11-24 00:10:11

nm 不会返回任何内容,因为您没有实例化任何对象。您的整个代码都已优化。将其添加到您的代码中,您将看到它已构建:

class MyClass {
public:
    MyClass() {};
    int i() { return 0; };
    int j(int x);
};

int MyClass::j(int x) {
    return x + 2;
}

现在您可以构建一些东西

$ clang -emit-llvm -c class.cpp
$ nm class.o
---------------- T __ZN7MyClass1jEi
$ clang -emit-llvm -S class.cpp
$ cat class.s
; ModuleID = 'class.cpp'
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-apple-macosx10.6.7"

%class.MyClass = type { i8 }

define i32 @_ZN7MyClass1jEi(%class.MyClass* %this, i32 %x) nounwind ssp align 2 {
  %1 = alloca %class.MyClass*, align 8
  %2 = alloca i32, align 4
  store %class.MyClass* %this, %class.MyClass** %1, align 8
  store i32 %x, i32* %2, align 4
  %3 = load %class.MyClass** %1
  %4 = load i32* %2, align 4
  %5 = add nsw i32 %4, 2
  ret i32 %5
}

nm doesn't return anything because you're not instantiating any objects. Your whole code is optimized out. Add this to your code and you'll see it built:

class MyClass {
public:
    MyClass() {};
    int i() { return 0; };
    int j(int x);
};

int MyClass::j(int x) {
    return x + 2;
}

Now you have something to build

$ clang -emit-llvm -c class.cpp
$ nm class.o
---------------- T __ZN7MyClass1jEi
$ clang -emit-llvm -S class.cpp
$ cat class.s
; ModuleID = 'class.cpp'
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-apple-macosx10.6.7"

%class.MyClass = type { i8 }

define i32 @_ZN7MyClass1jEi(%class.MyClass* %this, i32 %x) nounwind ssp align 2 {
  %1 = alloca %class.MyClass*, align 8
  %2 = alloca i32, align 4
  store %class.MyClass* %this, %class.MyClass** %1, align 8
  store i32 %x, i32* %2, align 4
  %3 = load %class.MyClass** %1
  %4 = load i32* %2, align 4
  %5 = add nsw i32 %4, 2
  ret i32 %5
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文