-l gcc linux 编译
2016-06-30 16:39:11 tiemaxiaosu 阅读数 146

一、编译过程

(1)、预处理(Pre-Processing
(2)、编译(Compiling
(3)、汇编(Assembling
(4)、链接(Linking
           
二、常用选项
       
例如:
 •gcc hello.c -o hello(直接编译链接成可执行文件)
 
 
 
 
2018-03-10 15:33:01 u012297629 阅读数 30

gcc 编译分为四个步骤:

预处理 -> 编译 -> 汇编 -> 链接

预处理编译器将C源代码中的包含的头文件如stdio.h编译进来

gcc -E test.c -o test.i //.i文件

编译首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,Gcc把代码翻译成汇编语言。

gcc -S test.i -o test.s //.s文件

汇编汇编阶段是把编译阶段生成的”.s”文件转成二进制目标代码.

gcc -c test.s -o test.o //.o文件

链接汇编阶段是把编译阶段生成的”.s”文件转成二进制目标代码.

gcc test.o -o test //bin文件

gcc基本使用格式:

$ gcc [param] 要编译的文件 [param] [目标文件]

其他参数:

-static 链接静态库

-llibrary 链接名为library的库文件

-w 关闭所有警告信息信息

-v 列出编译步骤

-l 指定程序要链接的库

-L指定库文件目录

-I 指定头文件目录。

-O对源代码进行基本优化。


2018-02-20 10:07:08 zhm4111 阅读数 130

gcc/g++在执行编译的时候,分四个阶段:

1、预处理,完成include文件展开和宏定义(预处理器cpp)

2、根据编译参数进行优化,编译成汇编代码(编译器egcs)

3、用汇编器把汇编代码变成目标代码(汇编器as)

4、用连接器把生成的目标代码和用户提供的库连接起来,生成可执行文件(链接器ld)

gcc常用的编译选项:

-c            只生成object,  不链接

-o           生成指定的输出文件

-E           只运行c预编译器cpp,不生成文件

-S           生成汇编代码

gcc  用来编译c   g++用来编译c++



2018-04-03 09:06:14 qq_40456659 阅读数 20


GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套 
    
GNU编译器套装



/

[root@localhost ~]# cd hello

[root@localhost hello]# ls
[root@localhost hello]# touch hello.c
[root@localhost hello]# ls
hello.c
[root@localhost hello]# cat hello.c
[root@localhost hello]# vi hello.c
[root@localhost hello]# gcc hello.c
[root@localhost hello]# ls
a.out  hello.c

[root@localhost hello]# ./a.out

1. 无选项编译链接
用法:#gcc test.c
作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。

Hello world!
[root@localhost hello]# gcc hello.c -o hello2
[root@localhost hello]# ls
a.out  hello2  hello.c

[root@localhost hello]# ./hello2

2. 选项 -o
用法:#gcc test.c -o test
作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。

Hello world!

[root@localhost hello]# 


gcc所遵循的部分约定规则: 
  .c为后缀的文件,C语言源代码文件; 
  .a为后缀的文件,是由目标文件构成的档案库文件; 
  .C,.cc或.cxx 为后缀的文件,是C++源代码文件; 
  .h为后缀的文件,是程序所包含的头文件; 
  .i 为后缀的文件,是已经预处理过的C源代码文件; 
  .ii为后缀的文件,是已经预处理过的C++源代码文件; 
  .m为后缀的文件,是Objective-C源代码文件; 
  .o为后缀的文件,是编译后的目标文件; 
  .s为后缀的文件,是汇编语言源代码文件; 
  .S为后缀的文件,是经过预编译的汇编语言源代码文件。 
执行过程


2015-04-27 17:54:00 weixin_30451709 阅读数 0

gcc 编译器是众多编译器组合入口,例如在编译 .cpp 文件时,使用c++ 编译器,编译.c 文件时,使用c编译器。

在编译c++程序时, 库文件与头文件可通过 -L[dir] 指定库目录 , -l[name] 指定库文件名称。指定库文件名称时,需按照指定范式。例如库文件 libabc.a ,  [lib]abc[.a] 中括号部份默认乎略, 此时库文件名称为: abc ,因此在gcc 编译时,通过 -labc 来加载该库.

通常c++ 程序会用到标准库,例如代码中包含 string
#include<string>

using namespace std;

在编译时,会遇到fatal error: string: No such file or directory compilation terminated , 因为代码中使用了标准库代码,编译时,没包含该库。c++标准(静态/动态)库名称是: libstdc++.a  , libstdc++.so , 因此编译时gcc指令附加 -lstdc++

gcc -I/usr/include/openssl/ -Wall testzs.cpp -o testzsexe  -lcrypto -ldl -lstdc++

这条指令包含了3个库 , -o 输出编译结果为:testzsexe , -Wall 表示输出全部编译警告信息, 如果将 -Wall 改为 -Werror , 表示遇到警告信息时,停止编译。 -I 指定库头文件路径。本例中也可不指定 /I指令。因为 /usr/include 是系统默认头文件路径。 在代码中使用 #include<openssl/....h> 即可。

在window 平台代码移值到linux 时,遇到如下异常: fopen_s?was not declared in this scop , 在linux 中没有fopen_s(...)函数, 因此,要么始用linux 平台的fopen 函数,或者重新实现 fopen_s 函数。

转载于:https://www.cnblogs.com/a_bu/p/4460858.html

linux gcc 和 g++ 编译

阅读数 219

没有更多推荐了,返回首页