Compiling C and C++

Compiling C and C++

本文关键字:C++ and Compiling      更新时间:2023-10-16

我有一个用C编写的程序,我需要使用用C++编写的KDIS库。我用automake&KDevelop的朋友。如何将所有内容编译在一起??因为我想在我的C程序中调用一些KDIS函数。

提前谢谢。

如果您需要调用未解密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;
}

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

另外,看看这个堆栈溢出问题,我相信这正是您所需要的。