Compiling C and C++
Compiling C and C++
我有一个用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++代码。
另外,看看这个堆栈溢出问题,我相信这正是您所需要的。
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- Gurobi GRBModel and GRBmodel in C++
- std::visit and std::variant usage
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- different between int **arr =new int [ n]; and int a[i][j]?
- C++ getenv and setenv
- Inference pytorch C++ with alexnet and cv::imread image
- Visual Studio 2019 C++ and std::filesystem
- 保证逻辑 AND 表达式中的函数调用
- python ctypes and C++ pointers
- C++ const char with .begin() and .end()
- Threads with Classes and std::packaged_task
- libgphoto2 and Visual Studio 2019