这个命令很灵活,格式是:

cc -o 目标二进制可执行文件 文件1 文件2 文件3 。。。。。

其中目标文件后面的文件,可为源代码,也可为二进制文件,也可为库文件

比如:

//a.c
#include <stdio.h>
#include "b.h"
main(){
bb();
} //b.h
int a;
void bb(void); //b.c
#include <stdio.h>
#include "b.h"
int a=;
void bb(){
printf("das%d\n",a);
}

cc -c a.c;此命令生成a.o

cc -c b.c;此命令生成b.o

ar -crv libb.a b.o;此命令生成静态库文件

以下六中连接方式都是可以的,最终都生成了同样的可执行文件a:

cc -o a a.c b.c

cc -o a a.c b.o

cc -c a a.o b.c

cc -o a a.o b.o

cc -o a a.c libb.a

cc -o a a.o libb.a

以上都是将库文件直接复制到程序文件中,链接的文件既可以是.o文件,也可以是源代码文件,但是有一点特殊的是,当我们生成动态库的时候,就只能用源代码文件去生成动态库了,而不能用中间代码.o文件去生成,举个例子:

a.c是主程序源代码,a.o是编译后的二进制文件,生成动态库文件libb.so用下面的命令

cc -shared -fPIC -o libb.so a.c

而不能用cc -shared -fPIC -o libb.so a.o

关于cc -o命令的更多相关文章

  1. Linux安装Redis报错`cc:命令未找到`

    缺少gcc和gcc-c++的编译环境,安装即可. 可以联网情况下使用命令 yum install gcc yum install gcc-c++ 然后清理原来的残余文件 make distclean ...

  2. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

    很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...

  3. C 语言学习 之搭建环境和熟悉命令

    Open Terminal 打开终端To run a command as administrator (user "root"), use "sudo <comm ...

  4. Vim进阶命令

    1. 查找    /xxx(?xxx)       表示在整篇文档中搜索匹配xxx的字符串, / 表示向下查找, ? 表示                    向上查找.其中xxx可以是正规表达式, ...

  5. 【C编程基础】make命令和makefile文件

    1.关于程序的编译和链接 一般来说,无论是C.C++首先要把源文件编译成中间目标文件即 Object File(windows为.obj文件,unix为.o文件),这个动作叫做编译(compile). ...

  6. 在Windows命令行中编译运行C/C++程序

    此处运行环境是在Windos下,运行cmd命令进入DOS界面 现在有一段简单C++代码(文件名为 demo.cpp),用于计算a*b的值 #include<iostream> using ...

  7. GNU Emacs命令速查表

    GNU Emacs命令速查表 第一章  Emacs的基本概念 表1-1:Emacs编辑器的主模式 模式 功能 基本模式(fundamental mode) 默认模式,无特殊行为 文本模式(text m ...

  8. make命令和makefile文件

    make命令和makefile文件的结合提供了一个在项目管理领域十分强大的工具,它不仅常被用于控制源代码的编译,而且还用于手册页的编写以及将应用程序安装到目标目录. makefile文件由一组依赖关系 ...

  9. Linux 究级基础入门命令整理

    Linux 究级基础入门命令整理 条条框框,三三两两,怎讷个这么多,哈哈!no zuo no die. 纯粹个人菜鸟笔记,望大神笑纳! 后续,未完!! 查看系统信息 uname -a - 查看内核/操 ...

随机推荐

  1. Square Root

    Square RootWhen the square root functional configuration is selected, a simplified CORDIC algorithm ...

  2. maven 父工程 消除重复 对子模块进行管理 主要继承依赖

     子类继承父类的 可以不需要groupid与versionid

  3. Linux下创建和删除软、硬链接 可临时处理空间不足

    在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问. ...

  4. gbk、utf-8、utf8mb4区别

    1. 存储大小(1). GBK编码专门用来解决中文编码的,是双字节的.不论中英文都是双字节的.(2). UTF-8 编码是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用2 ...

  5. Django-website 程序案例系列-17 forms表单验证的字段解释

    1.Django内置字段如下: Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label标签或显示内容 initial ...

  6. Sql 标识列 增长1000

    Sql 标识列 增长1000 的解决办法: 1. Open "SQL Server Configuration Manager" 2. Click "SQL Server ...

  7. Git如何合并分支代码

    如果是在IDEA中使用Git,可以直接合并代码. 我当前的开发分支,是feature/bing,现在我需要合并分支 feature/xxs 上的代码,这个过程只需要在IDEA中完成. 1.更新代码,会 ...

  8. day7 字符集转换

    python2 默认 ASCLL 不支持中文 转换比较麻烦.需要先解码成unicode然后在编码成想转换的语言 s = "特斯拉" s_to_unicode = s.decode( ...

  9. [luogu1447][bzoj2005][NOI2010]能量采集

    题目大意 求出\(\sum_{i=1}^{n} \sum_{i=1}^{m} gcd(i,j)\times 2 -1\). 题解 解法还是非常的巧妙的,我们考虑容斥原理.我们定义\(f[i]\)表示\ ...

  10. C++ 容器:顺序性容器、关联式容器和容器适配器

    什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...