来源:http://elephantliu.blog.51cto.com/1107116/652286
相信IDE党在写C/C++工程肯定经常是一个工程里面有多个文件。那么,gcc能否处理多个文件的情况呢?答案是能,不过有一些需要注意的地方。
两个文件,sum.cpp文件定义了sum函数,代码如下:
-
int sum(int a,int b)
-
{
-
return a+b;
-
}
main.cpp调用sum函数并输出结果,代码如下:
-
#include
-
using namespace std;
-
int sum(int a,int b);
-
int main(){
-
cout<
-
return 0;
-
}
怎么编译呢?
错误方法:
-
g++ -o main main.cpp
如果您这样编译的话,会得到错误:
-
/tmp/xxxx.o: In function `main':
-
main.cpp:(.text+0xf): undefined reference to `sum(int, int)'
-
collect2: ld returned 1 exit status
很明显,从第三行可以看出来(ld),是链接时错误。造成这个错误的原因也很简单,main.cpp里面没有sum函数的定义,所以链接器(ld)会报怨,找不到sum函数的定义。
相信您应该知道,C/C++是靠目标文件(扩展名为.o的文件)来实现多文件编程的。
首先、编译器将源文件编译成目标文件。
然后、链接器将多个目标文件链接成一个可执行文件。
那么,我们用gcc该如何做呢?我们需要下面三行命令:
-
g++ -c -o main.o main.cpp
-
g++ -c -o sum.o sum.cpp
-
g++ -o main main.o sum.o
其中,-c的意思是“只编译而不链接”。
之后,就可以运行了。命令:
-
./main
输出:
-
11
本节完。
阅读(2002) | 评论(0) | 转发(0) |