C++ 里使用C的头文件/函数
2017-03-15 20:42
197 查看
我用一个例子来告诉你怎么样在 C++ 里使用C的头文件/函数。 比方说我有一个C的头文件叫 c.h, C的源码文件叫 c.c,内容分别是 c.h: #ifndef _ASDFD_INCLUDED_ #define _ASDFD_INCLUDED_ #include <stdio.h> extern int test(int a); #endif c.c: #include "c.h" int test(int a) { printf("A = %d\n", a); return a*a; } 现在我想在c++中使用c.c中提供的函数test(),我的c++文件名字叫 a.cpp,那么里面跟C有关的部分就要用 extern "C" {} 大括号括起来,看看我的 a.cpp: #include <iostream> using namespace std; extern "C" { #include "c.h" } int main() { int b = 12; b = test(b); cout<<"b = "<<b<<endl; return 0; } 看到了吧,#include "c.h" 被 extern "C" {}括起来了。 然后是如何编译,先把C文件编出目标文件(.o)来 gcc -c c.c 你会看到生成了 c.o,其实,有目标文件就够了,如果你一定要做成(静态/动态)库文件,也是可以的,不过我这里就不深入了,做成库和直接用目标文件对解决你的问题没有任何区别。 然后再编译C++文件,也就是我的 a.cpp g++ -o hello a.cpp c.o 看到了吧,我在编译 a.cpp 的时候把C生成的 c.o也加上了。 然后生成 可执行的 hello, 运行 ./hello 就可以看到 A = 12 b = 144 关于创建静态库,假定你有3个C文件, a.c, b.c, c.c 提供了你C++要用到的接口,那么可以把这三个C文件编译出来的目标文件放到一个库文件里供C++使用,方法为 先编译出目标文件 gcc -c a.c b.c c.c 这时候你应该看到有 a.o b.o c.o了 然后创建库文件 ar cr libtest.a a.o b.o c.o 这三个目标文件就放入 libtest.a 这个静态库中了,然后编译C++程序 (你的C++程序应该已经按照我前面说的用 extern "C" 把C的接口都括起来了),假定你的 libtest.a 放在 /home/aaa/lib下 g++ -o my.exe my.cpp -L/home/aaa/lib -ltest 就会生成可执行文件 my.exe了。
相关文章推荐
- C/C++头文件、函数使用说明
- VS提示C++某些头文件或函数已经过期无法使用
- C++常用字符串处理函数及使用示例
- [C++]实验四:掌握内联函数的使用、参数个数不确定的函数的设计...
- c++常用函数所在头文件一览
- [转]C/C++时间函数使用方法
- [C++] 使用const提高函数的健壮性
- C++中函数对象的使用
- 使用IDispatch::Invoke函数在C++中调用C#实现的托管类库方法
- C++常用字符串处理函数及使用示例
- C++常用字符串处理函数及使用示例(ASCII)
- 使用C++异常来取代exit()函数
- C++常用字符串处理函数及使用示例
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- C++常用字符串处理函数及使用示例
- 关于C++中函数指针的使用(包含对typedef用法的讨论)
- java中如何使用JNI调用C++写的函数
- 在c++中qsort()排序函数的使用qsort函数应用大全