【发布时间】:2011-06-23 21:55:38
【问题描述】:
我正在为 LLVM 中的一种特殊用途语言编写编译器。我想为已经用 C++ 编写的库添加绑定。我的想法是将库编译为 LLVM 字节码(使用clang -emit-llvm -S abc.c)并在编译期间链接它。这适用于像
// lib.c
int f() {
return 123;
}
但是库的某些部分是这样写的
// A.cc
class A {
public:
int f() { return 123; }
};
这会导致空字节码文件。我知道我可以通过分离实现来解决这个问题:
// A.cc
class A {
public:
int f();
};
int A::f() {
return 123;
}
但这将是很多乏味的工作。有什么方法可以从我的库源中创建有用的字节码吗?或者任何其他方式使库在我的编译器中可用?
【问题讨论】:
-
您的第一个示例是源文件,而您的第二个示例是头文件。也许这就是问题所在?您是否尝试过在某个虚拟源文件中包含所有头文件并进行编译?
-
@Space_C0wb0y: 两者没有实际区别,都是处理后编译结果。
-
你是对的 Space_c0wb0y,如果我编译 .hpp 文件,我会得到一个预处理的头文件(我猜这有点糟糕)。但是,如果我将代码放在一个名为 A.cc 的文件中,那么 clang 会产生所描述的输出。我会修改这个例子。