可能重复:
如何从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的原因.
只要您有一个要调用的未编码的符号名称,就可以非常轻松地将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)
| 归档时间: |
|
| 查看次数: |
1243 次 |
| 最近记录: |