在linux下如何编译C++程序
一、GCC(GNU Compiler Collection)是linux下最主要的编译工具,GCC不仅功能非常强大,结构也异常灵活。它可以通过不同的前端模块来支持各种语言,如Java、Fortran、Pascal、Modula-3和Ada
g++是GCC中的一个工具,专门来编译C++语言的。
GCC的参数有:( 也是分步实现)
-E 让GCC在预处理结束后停止编译 g++ -E hello.cpp -o hello.i
-c 将hello.i编译成目标代码 g++ -c hello.i -o hello.o
将目标文件连接成可执行文件 g++ hell.o -o hello
可以一步实现 g++ hello.cpp -o hello
二、假如有两个以上源文件应该一下编译。
一步就实现 g++ foo1.cpp foo2.cpp -o foo
也可以分步实现 g++ -c foo1.cpp -o foo1.o
g++ -c foo2.cpp -o foo2.o
g++ foo1.o foo2.o -o foo
三、GCC一些常用选项
1、产生警告信息的选项大多数以-W开头 其中有-Wall
g++ -Wall hello.cpp -o hello
2、将所有的警告当成错误的选项-Werror
g++ -Werror hello.cpp -o hello
3、寻找头文件选项 -I (linux默认路径:头文件在/usr/include/下),不在这个路径下就要用-I指定。
gcc foo.cpp -I/home/include -o foo
4、 库依赖选项 -L (linux默认路径:库文件在/usr/lib/下),不在这个路径下就要用-L指定。
g++ foo.cpp -L/home/lib -lfoo -o foo
库就是将源文件编译之后生成的目标文件的集合。
库命名以lib开头。
库有静态库(通常以.a结尾)和动态库(通常以.so结尾)
默认情况下,g++以动态库形式连接。如果要静态库连接则要用-static指定(g++ foo.cpp -L/home/lib -static -lfoo -o foo)
5、优化选项 -On (n取0到3之间)
四、介绍一些GNU 二进制链工具
1、ar命令(也称为工具) 可以用来编译成静态库
ar [-] {操作选项} {任选项} [成员名] [count] archive files....
ar r v libtest.a hello.o hello1.o 生成一个库名为test,该库中存放了hello.o和hello1.o这两个模块。
操作项:d (删除)、 m(移动)、p(标准输出)、q(快速追加)、r(在库中插入模块)、t(显示库的模块清单)、x(从库中提取一个成员)。
任选项:a(成员后面添加一个新文件)、b(成员前面添加一个新文件)、c(创建一个库)、f(截短指定名字)、v(显示执行操作选项的附加信息)。
2、编译成动态库
分步完成: gcc -fPIC -c func.cpp -o func.o
gcc -shared -o libfunc.so func.o
一步就完成:gcc -fPIC -shared -o libfunc.so func.cpp
在linux下如何编译C++程序的更多相关文章
- Linux下静态编译Qt程序
一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的.会提示缺少……库文件之类的错误.这就是动态编译的结果. 但是如果我们想编译一个程序 ...
- 面试官问Linux下如何编译C程序,如何回答?为你编译演示
文章来源:嵌入式大杂烩 作者:ZhengNL Windows下常用IDE来编译,Linux下直接使用gcc来编译,编译过程是Linux嵌入式编程的基础,也是嵌入式高频基础面试问题. 一.命令行编译及各 ...
- Linux编程环境介绍(3) -- linux下的c/c++程序开发
目录: 1. 编辑器( Vi ) [vi 与 vim] vi(visual interface)是linux系统最重要的文本编辑器, 所有的 Unix-Like 系统都会内置vi文本编辑器. vim ...
- LINUX下文件编译
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- FFmpeg在Linux下安装编译过程
转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52402759 今天介绍下FFmpeg在Linux下 ...
- Linux下nginx编译安装教程和编译参数详解
这篇文章主要介绍了Linux下nginx编译安装教程和编译参数详解,需要的朋友可以参考下 一.必要软件准备1.安装pcre 为了支持rewrite功能,我们需要安装pcre 复制代码代码如下: # y ...
- 从四个问题透析Linux下C++编译&链接
摘要:编译&链接对C&C++程序员既熟悉又陌生,熟悉在于每份代码都要经历编译&链接过程,陌生在于大部分人并不会刻意关注编译&链接的原理.本文通过开发过程中碰到的四个典型 ...
- 不错的linux下通用的java程序启动脚本
不错的linux下通用的java程序启动脚本(转载) 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的 ...
- ACE-6.1.0 linux 下的编译与安装步骤
ACE-6.1.0 linux 下的编译与安装步骤 引用至http://www.cnblogs.com/liangxiaxu/archive/2013/03/07/2948417.html 1.从 ...
随机推荐
- 代理丶通知丶KVO之间区别和各自优势
文/OyeOnoOmg(简书作者)原文链接:http://www.jianshu.com/p/75d3fd218a23著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 今天在网上看到一个 ...
- [HDU 4842]--过河(dp+状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4842 过河 Time Limit: 3000/1000 MS (Java/Others) Mem ...
- Filter学习
在这之前一直对filter感到陌生,有点细思极恐的感觉--终于下定决心来学习一下,欢迎拍砖-- Filter的主要作用是实现对HttpServletRequest的预处理,也可以对HttpServle ...
- Qt对话框_模态/非模态
对话框在Qt GUI应用程序中有着广泛的用途,对话框有模态.非模态两种情况. 对于参数选择的对话框,一般用模态对话框:对于显示或查看某些内容的对话框,一般用非模态对话框. 对话框类QDialog,官方 ...
- ASP.NET MVC 5 学习教程:通过控制器访问模型的数据
原文 ASP.NET MVC 5 学习教程:通过控制器访问模型的数据 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连 ...
- c语言memset详解
void *memset(void *s, int ch, size_t n);(int ch可以是char或int) 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的 ...
- 17.1 Replication Configuration
17.1 Replication Configuration 17.1.1 How to Set Up Replication 17.1.2 Replication Formats 17.1.3 Re ...
- Sql 增加字段(有些只能在ORACLE中运行)
增加字段 alter table table_name add column_name varchar(200) 删除字段 ALTER TABLE table_NAME DROP COLUMN col ...
- objective-C 初识
objective-C objective-c 是c语言的改进版 一.方法的定义: 格式: -/+(返回值类型)方法名:(参数类型) 参数名 [方法名] : (参数类型) 参数名......... 例 ...
- hdu 1026 Ignatius and the Princess I【优先队列+BFS】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 http://acm.hust.edu.cn/vjudge/contest/view.action ...