编译C和C ++

时间:2012-08-01 08:38:06

标签: c++ c compilation

我有一个用C编写的程序,我需要使用用C ++编写的KDIS库。我在KDevelop中与automake& friends编译我的C程序。我怎么能一起编译所有东西?因为我想在我的C程序中调用一些KDIS函数。

提前谢谢。

2 个答案:

答案 0 :(得分:6)

如果需要调用未解析extern "C"的C ++函数,那么您必须自己从C ++程序中执行此操作。您可以在项目中创建一个单独的C ++文件,该文件包含您在extern "C"函数中需要的所有库函数,以供项目的其余部分使用。你必须告诉autotools你正在使用C和C ++。文件扩展名应该足以决定哪个是。

举个例子,考虑以下mymagic.cc为用C ++编写的libmagic创建绑定:

#include <libmagic/magic.hh>
extern "C" {
  int doMagic() {
    magic::Wizard w("foo", 42);
    magic::Result res = w.doMagic();
    return res.getResultCode();
  }
}

对于您的应用程序的其余部分,doMagic()将显示为另一个C函数。但内部是C ++,所以它可以使用你想要的任何C ++结构。当你需要从库中传递东西时,你应该使用指向不透明类型的指针。因此,在您的C代码也使用的标题mymagic.h中,您可以编写

struct magicValue;
int doMagic(void);
struct magicValue* createMagic(void);
void destroyMagic(struct magicValue*);

然后在mymagic.cc你会更明确:

struct magicValue {
    magic::value v;
    magicValue(magic::value val) : v(val) { }
};
magicValue* createMagic() {
    return new magicValue(magic::value("foo"));
}
void destroyMagic(magicValue*) {
    delete magicValue;
}

答案 1 :(得分:2)

This link可以帮助您了解如何在应用程序中混合使用C和C ++代码。

另外,请查看this Stack Overflow问题,我相信这就是您所需要的。