c++ 在客户端的GCC使用
c++ 在客户端的GCC使用
翻译自:
GCC是GNU工具箱的一个功能,GNU还包括如下功能:
- GNU compiler collection (GCC)
- GNU make
- GNU Debugger (GDB)
- ....
GCC目前在所有的linux系统都支持
本文在osx系统实现,linux类似, windows需要(MinGW or Cygwin GCC)
查看gcc版本
gcc --version
gcc --help
编译c语言
gcc hello.c
设置输出文件名为hello
gcc -o hello hello.c
编译c++
g++ -o hello hello.cpp
g++ -wall -g -o Hello Hello.cpp
-o 说明输出文件名
-Wall 输出所有warning
-g: 生成附带的debug 信息为gdb debugger用
分离compile和link
g++ -c -Wall -g Hello.cpp
g++ -g -o Hello Hello.o
-c compile产生.o文件, -g利用Hello.o输出应用
compile并link多个源文件
g++ -o myprog.exe file1.cpp file2.cpp
更常见的方式
g++ -c file1.cpp
g++ -c file2.cpp
g++ -o myprog.exe file1.o file2.o
compile into a shared Library
为了把C/C++文件编译到共享库中(win中是.dll,unix是.so),使用-shared选项
GCC编译流程
预处理
cpp hello.c > hello.i
编译The compiler compiles the pre-processed source code into assembly code for a specific processor.
gcc -S hello.i
The -S option specifies to produce assembly code, instead of object code.
The resultant assembly file is "hello.s".
Assembly: The assembler (as.exe) converts the assembly code into machine code in the object file "hello.o"
as -o hello.o hello.s
Linker: Finally, the linker (ld.exe) links the object code with the library code to produce an executable file "hello.exe".
ld -o hello.exe hello.o ...libraries...
Headers (.h), Static Libraries (.lib, .a) and Shared Library (.dll, .so)
- A static library has file extension of ".a" (archive file) in Unixes or ".lib" (library) in Windows。the machine code of external functions used in your program is copied into the executable.
- A shared library has file extension of ".so" (shared objects) in Unixes or ".dll" (dynamic link library) in Windows. When your program is linked against a shared library, only a small table is created in the executable.most operating systems allows one copy of a shared library in memory to be used by all running programs, thus, saving memory
Searching for Header Files and Libraries (-I, -L and -l)
When compiling the program, the compiler needs the header files to compile the source codes; the linker needs the libraries to resolve external references from other object files or libraries. The compiler and linker will not find the headers/libraries unless you set the appropriate options
For each of the headers used in your source (via #include directives), the compiler searches the so-called include-paths for these headers. The include-paths are specified via -Idir option (or environment variable CPATH).
Try list the default include-paths in your system used by the "GNU C Preprocessor" via
cpp -v
Try running the compilation in verbose mode (-v) to study the library-paths (-L) and libraries (-l) used in your system:
gcc -v -o hello.exe hello.c
GCC Environment Variables
1.PATH: For searching the executables and run-time shared libraries (.dll, .so).
2.CPATH: For searching the include-paths for headers. It is searched after paths specified in -I options. C_INCLUDE_PATH and CPLUS_INCLUDE_PATH can be used to specify C and C++ headers if the particular language was indicated in pre-processing.
3.LIBRARY_PATH: For searching library-paths for link libraries. It is searched after paths specified in -L options.
make
Running make without argument starts the target "all" in the makefile. A makefile consists of a set of rules. A rule consists of 3 parts: a target, a list of pre-requisites and a command, as follows:
target: pre-req-1 pre-req-2 ...
command
Use "tab" to indent the command (NOT spaces).
Comment & Continuation
A comment begins with a # and lasts till the end of the line. Long line can be broken and continued in several lines via a back-slash ().
target1 [target2 ...]: [pre-req-1 pre-req-2 ...][command1
command2
......]
Phony Targets
A target that does not represent a file is called a phony target. For example, the "clean" in the above example, which is just a label for a command. The standard phony targets are: all, clean, install
Variables
variable begins with a $ and is enclosed within parentheses (...) or braces {...}.
Automatic Variables
Automatic variables are set by make after a rule is matched.
$@: the target filename.
$*: the target filename without the file extension.
$<: the first prerequisite filename....
Virtual Path - VPATH & vpath
You can use VPATH (uppercase) to specify the directory to search for dependencies and target files. For example,
Search for dependencies and targets from "src" and "include" directories
The directories are separated by space
VPATH = src include
You can also use vpath (lowercase) to be more precise about the file type and its search directory. For example,
vpath %.c src
vpath %.h include
Pattern Rules
c++ 在客户端的GCC使用的更多相关文章
- [000]socket通信--server和client实现的简单例子
在C语言中就学过scanf和printf,其实理解socket就跟这两个输入输出差不多,只不过是信息的传输而已. 1.TCP服务器端(server)的默认函数调用顺序: 按照上述的调用顺序,我们可以来 ...
- rpc简介、原理、实例
简介 RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,出于一种类比的愿望,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像LPC(本地过 ...
- unix网络编程-配置unp.h头文件
第一步进入:www.unpbook.com,下载unp的随书代码.新建一个目录,将压缩包拷贝到这一目录下面,然后将压缩包直接解压:tar -zxvf 压缩包名.tar.gz 完成上一步后,进入到un ...
- Socket服务端和客户端(C++,CodeBlocks+GCC编译)
//main.cpp 1 #include "j_socket.h" #include <stdio.h> #include <pthread.h> ; j ...
- Linux 平台静默安装 Oracle客户端
需求:Linux平台,安装完整版Oracle客户端 Tips:如果只是用到sqlldr,sqlplus功能,可以参考<Linux上oracle精简版客户端快速部署>快速部署精简版:如果需要 ...
- ssl客户端与服务端通信的demo
服务端程序流程 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <str ...
- CentOS7.2 编译安装SVN1.9.5客户端
背景 原来想在Linux机上开Samba共享,在Windows机上把工作目录映射到网络驱动器,用Source Insight编辑代码后就不用来回同步文件了. 然而在使用中发现,Windows机用的SV ...
- Centos 6.5 SNMP客户端安装及配置版本net-snmp-5.7.3
Centos 6.5 SNMP客户端安装及配置SNMP版本:net-snmp-5.7.3.tar.gz1.下载软件cd /usr/local/srcyum -y install gccwget htt ...
- 在Linux下如何使用GCC编译程序、简单生成 静态库及动态库
最近在编写的一个Apache kafka 的C/C++客户端,,在看他写的 example中,他的编译是用librdkafka++.a和librdkafka.a 静态库编译的,,,而我们这 ...
随机推荐
- 自定义右键菜单,禁用浏览器自带的右键菜单[右键菜单实现--Demo]
许多从事Web开发的会发现有些事,我们需要禁用浏览器本事自带的右键菜单,而实现自定义的右键菜单下面我们也来实现一个自定义的右键菜单 首先来创建JSP页面 <%@ page language=&q ...
- Metasploit Framework命令汇总
一.msfconsole ? 帮助菜单back 从当前环境返回banner 显示一个MSF bannercd 切换目录color 颜色转换connect 连接一个主机exit 退出MSFhelp 帮助 ...
- python 二分法查找
这个也是之前写的程序,现在把它贴上来 #!/usr/bin/python import os os.system('clear') def binsearch(seq,x,low,high): mid ...
- nginx配置解读
nginx.conf基本配置 ##Start. ##Basic 基础配置 user www www; #运行用户 worker_processes ; #启动进程,通常设置成和cpu的数量相等 wor ...
- Hadoop发行版本介绍
前言 从2011年开始,中国进入大数据风起云涌的时代,以Hadoop为代表的家族软件,占据了大数据处理的广阔地盘.开源界及厂商,所有数据软件,无一不向Hadoop靠拢.Hadoop也从小众的高富帅领域 ...
- shell脚本 -d 是目录文件,那么-e,-f分别是什么?还有"! -e"这又是什么意思呢?
-e filename 如果 filename存在,则为真-d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真-L filen ...
- photoshop基础
在Photoshop中,对图像的某个部分进行色彩调整,就必须有一个指定的过程.这个指定的过程称为选取.选取后形成选区. 现在先明确两个概念: 选区是封闭的区域,可以是任何形状,但一定是封闭的.不存在开 ...
- POJ 2891 Strange Way to Express Integers (解一元线性方程组)
求解一元线性同余方程组: x=ri(mod ai) i=1,2,...,k 解一元线性同余方程组的一般步骤:先求出前两个的解,即:x=r1(mod a1) 1x=r2(mod a2) ...
- 2015年4月 15款免费jQuery插件
点这里 We have collected for you the 15 fresh, free and handy jQuery plugins that will help to speed up ...
- 40页PPT告诉你真正的"互联网+"
点这里 40页PPT告诉你真正的"互联网+" 2015-04-06 网站分析公会 超过50万名互联网从业人士关注 互联网运营领域最具影响力自媒体 本文根据和君赵大伟关于互联网思维大 ...