|
楼主 |
发表于 2006-4-17 15:11:21
|
显示全部楼层
Post by sybaselu
me.h的头文件
- #include <cstdio>
- extern "C" void CppPrintf(void);
复制代码
me.cpp文件
- #include <iostream>
- #include "me.h"
- using namespace std;
- void CppPrintf(void)
- {
- cout << "Hello\n";
- }
复制代码
test.c文件
- #include <stdlib.h>
- #include <stdio.h>
- #include "me.h" //新增加的。用gcc编译时不需要此头文件,但用g++编译时却要此文件
-
- int main(void)
- {
- CppPrintf();
- return 0;
- }
复制代码
第一种编译:不需要再test2.c中包含头文件me.h
- [root@root GUI]# gcc -c me.cpp
- [root@root GUI]# gcc -c test2.c
- [root@root GUI]# gcc -o test2 test2.o me.o -lstdc++
- [root@root GUI]#
- [root@root GUI]# ./test2
- Hello
复制代码
第二种编译:没有在test2.c中新增的me.h文件时的编译
- [root@root GUI]# g++ -c me.cpp
- [root@root GUI]# g++ -c test2.c
- test2.c: In function `int main()':
- test2.c:7: error: `CppPrintf' undeclared (first use this function)
- test2.c:7: error: (Each undeclared identifier is reported only once for each function it appears in.)
复制代码
可以看出gcc可以编译.cpp而g++也可以编译.c。但是用g++编译.c时要加头文件,什么原因?
再用g++编译
第三种编译:在test2.c中包含了me.h的头文件
- [root@root GUI]# g++ -c me.cpp
- [root@root GUI]# g++ -c test2.c
- [root@root GUI]# g++ -o test2 test2.o me.o -lstdc++
- [root@root GUI]#
- [root@root GUI]# ./test2
- Hello
复制代码
我试了另一种编译: test.c中不包含me.h,用gcc编译test.c,g++编译me.cpp,最后用g++链接
- kevin@libra:~/workspace/try$ gcc -c test.c
- kevin@libra:~/workspace/try$ g++ -c me.cpp
- kevin@libra:~/workspace/try$ g++ -o test test.o me.o
- kevin@libra:~/workspace/try$ ./test
- Hello
复制代码
我现在感觉有点晕了,哪位能推荐一本讲这些方面的书? 或者在哪能找到相关资料? |
|