Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103447
  • 博文数量: 33
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 188
  • 用 户 组: 普通用户
  • 注册时间: 2014-12-23 19:19
文章分类

全部博文(33)

文章存档

2015年(22)

2014年(11)

我的朋友

分类: C/C++

2015-01-08 21:14:34


来源:http://elephantliu.blog.51cto.com/1107116/652286
 相信IDE党在写C/C++工程肯定经常是一个工程里面有多个文件。那么,gcc能否处理多个文件的情况呢?答案是能,不过有一些需要注意的地方。
    两个文件,sum.cpp文件定义了sum函数,代码如下:


  1. int sum(int a,int b) 
  2.     return a+b; 

    main.cpp调用sum函数并输出结果,代码如下:

  1. #include  
  2. using namespace std; 
  3. int sum(int a,int b); 
  4. int main(){ 
  5.     cout<
  6.     return 0; 


    怎么编译呢?
    错误方法:

  1. g++ -o main main.cpp 


    如果您这样编译的话,会得到错误:

  1. /tmp/xxxx.o: In function `main': 
  2. main.cpp:(.text+0xf): undefined reference to `sum(intint)' 
  3. collect2: ld returned 1 exit status 

    很明显,从第三行可以看出来(ld),是链接时错误。造成这个错误的原因也很简单,main.cpp里面没有sum函数的定义,所以链接器(ld)会报怨,找不到sum函数的定义。
    相信您应该知道,C/C++是靠目标文件(扩展名为.o的文件)来实现多文件编程的。
    首先、编译器将源文件编译成目标文件。
    然后、链接器将多个目标文件链接成一个可执行文件。
    那么,我们用gcc该如何做呢?我们需要下面三行命令:

  1. g++    -c -o main.o main.cpp 
  2. g++    -c -o sum.o sum.cpp 
  3. g++ -o main main.o sum.o 

    其中,-c的意思是“只编译而不链接”。

    之后,就可以运行了。命令:

  1. ./main 


    输出:

  1. 11 


    本节完。

阅读(1833) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~