如何从C调用C++函数?

Pau*_*aul 1 c linker

可能重复:
如何从C调用用C++编写的lib?

我正在修改pHash,我想调用函数从文件位置生成感知哈希.当我尝试调用名为ph_dct_imagehash的函数时,编译器会抛出此错误:

/usr/include/CImg.h:72:18: fatal error: cstdio: No such file or directory
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

此时我意识到pHash是用C++编写的,因此在C程序中包含C++标头是行不通的.尽管如此,函数本身似乎应该可以从C调用,因为它没有参数,也没有返回值使用C++结构.有没有什么好方法可以从C调用C++函数ph_dct_imagehash?

注意:我主要是为了在C(而不是C++)上做得更好.这就是我将自己限制在C的原因.

Car*_*rum 5

只要您有一个要调用的未编码的符号名称,就可以非常轻松地将C++库与C程序链接起来.您将要制作一个C安全头文件或其他方式来转发声明函数名称,然后在最后将事物链接在一起(确保使用支持C++的链接器!).

这是一个简单的例子:

$ cat cplusplus.cpp 
#include <string>

extern "C"
const char *cplusplusFunction(void)
{
    static std::string a = "Hello, C++";
    return a.c_str();
}
$ cat example.c 
#include <stdio.h>

const char *cplusplusFunction(void);

int main(void)
{
    printf("%s\n", cplusplusFunction());
    return 0;
}
$ c++ -c -o cplusplus.o cplusplus.cpp
$ cc -c -o example.o example.c 
$c++ -o example example.o cplusplus.o
$ ./example 
Hello, C++
Run Code Online (Sandbox Code Playgroud)