`
wodamazi
  • 浏览: 1420246 次
文章分类
社区版块
存档分类
最新评论

g++

 
阅读更多

传统意义上的编译程序分两步走 —— 编译和链接:

1.编译(compile):指用编译器(compiler)将源代码(source code)生成二进制目标文件(object file),在Windows下也就是 .obj 文件,UNIX下是 .o 文件。编译时,编译器需要的是语法的正确,函数与变量的声明的正确,编译器只检测程序语法,和函数、变量是否被声明,函数并不需要被定义。

UNIX下g++的语法为:
g++ -c file.cpp

-c 是compile的意思,此命令将会生成 file.o 的目标文件。

2.链接(link):找到所要用到函数所在的目标文件,并把它们链接在一起合成为可执行文件(executable file)。链接时,要确保编译器能找到所有被用到了的函数所在的目标文件。

g++ file1.o file2.o -o program.exe

-o 是指定生成的可执行文件名称(output)。若不给出,默认的名称为 a.out

上述两部通常也可以合在一起完成:

g++ file1.cpp file2.cpp -o program.exe

这完全等同于上面两步的结合,会先生成目标文件,然后链接成 file.exe

3. 库 (library)

对于一个源文件很多的大项目,为了避免重复编译,也为了方便编译器链接,通常会把一些常用到的目标文件打包(archive),于是就成为了传说中的库文件(library)。在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。

UNIX 所要用到的命令:
1)ar -- create, modify, and extract from archives.
@Usage: ar cr lib****.a file1.o file2.o
**** 为自定义的库文件名。
标签 c (create):如果库不存在,则创建库;
标签 r (replace):如果库中已存在要添加的对象文件,则旧的对象文件将被替换。

实际上 ar 只是一个打包工具,是archive(打包)的首字母。它将一系列的目标文件首位连接在一起,并内嵌一个索引表,使得编译器能够方便地找到所需要的函数。一般来说,由于函数索引表的存在,对库的链接要比对一般的对象文件的链接更快。如果 ar 未能完成此项索引表工作,还可以手动用以下的 ranlib 命令创建索引表。

2) ranlib -- generate index to archive.
@Usage: ranlib lib****.a

3) nm -- list symbols from object files.

nm可以用来显示 ranlib 所构建的索引表。你将会看到所有库里的函数名(除了模板函数template function)。


4. 在编译时链接库

创建了自己的库,以后要用到相关函数的时候,只需在代码中声明所要用的函数(必须和库中定义得相同)。在链接的时候,需要给出库的名称和位置:

g++ file1.o file2.o -o program.exe -L**** -l****

-L 后紧跟库文件所在的目录地址,-l 后紧跟库名。

编译器在链接的时候会在所指定的目录地址下寻找名为 lib****.a 的库文件。


分享到:
评论

相关推荐

    gcc与g++离线安装包

    适合无网环境安装GCC与G++,版本为:4.8.5. 压缩包内置安装脚本:install.sh。运行即可完成安装。 方便快捷有效,可以避免各类依赖的困扰。 ---- 适合无网环境安装GCC与G++,版本为:4.8.5. 压缩包内置安装脚本:...

    gcc g++ rpm 安装包

    编译C++程序要安装g++ gcc-c++-3.4.6-3.i386.rpm libstdc++-devel-3.4.6-8.i386.rpm libstdc++-3.4.6-8.i386.rpm install.sh的内容 rpm -Uvh glibc-kernheaders-2.4-9.1.103.EL.i386.rpm --nodeps --force ...

    Kylin-Desktop-V10-GFB-Release-020-ARM64-g++ 安装包

    Kylin-Desktop-V10-GFB-Release-020-ARM64—g++ 安装包 Kylin-Desktop-V10-GFB-Release-020-ARM64—g++ 安装包 Kylin-Desktop-V10-GFB-Release-020-ARM64—g++ 安装包 Kylin-Desktop-V10-GFB-Release-020-ARM64—g++...

    g++和gcc离线安装包

    g++和gcc离线安装包。linux中安装redis需要的依赖。 安装方式: gcc-c++ ```bash # 将文件放到任意位置。我放到/home/soft下 cd /home/soft # 解压gcc-c++ tar -zxf gcc-c++.tar.gz #进入目录 cd /home/soft/gcc-c++...

    gcc g++ 离线安装包

    gcc g++ 离线安装包

    ubuntu/kylin系统离线安装gcc-g++-c++

    g++-7; gcc-7-base_; gcc-7; gcc-8-base; libasan4; libatomic1; libbinutils; libc-bin; libc-dev-bin; libc6-dev; libc6; libcc1; libcilkrts5; libgcc-7; libgcc1; libgomp1; libisl1; libitm1; liblsan0_8.4.0-1...

    ubuntu离线安装g++

    g++7.5.0版本,用于ubuntu、kylin离线安装g++,安装包为deb,执行安装命令即可,无需加载任何依赖库

    g++ for windows

    Installing c++/g++ on Windows Disclaimer: This page is being maintained mainly for my students. Use these instructions at your own risk. There is no warranty in any form or shape whatsoever!. There is...

    g++ gcc编译器安装包及其依赖

    unzip g++.zip cd g++ rpm -Uvh *.rpm gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)

    使用yum安装g++

    使用yum安装g++,软件开发,C语言开发,C++开发。

    gcc,g++ GNU C 手册

    gcc,g++ GNU C 手册,包括各种调试命令,选项,让你迅速掌握gcc g++进行开发. .c C源程序;预处理,编译,汇编 .C C++源程序;预处理,编译,汇编 .cc C++源程序;预处理,编译,汇编 .cxx C++源程序;预处理,编译,汇编 .m ...

    ubuntu18.04可用的g++7.5.0

    用于在ubuntu中离线安装g++和gcc,所有依赖已经准备好,可以像有网络一样快速安装g++和gcc,我是在ubuntu18.04中安装的,可以成功。该g++版本7.5.0

    统信UOS 用g++( 64 位)

    统信UOS 用g++( 64 位)

    Centos7.3 gcc g++ 4.8.5 离线rpm安装包

    离线环境下在centos7.3.1611系统下安装gcc和g++所需要的所有安装包,其中还对gcc和g++4.8.5的的版本进行了细分,包括4.8.5-4和4.8.5-28

    gcc g++离线安装包免费下载

    gcc g++离线安装包免费下载

    GCC G++ rpm安装包.part1.rar

    包括linux上安装GCC或G++的所有安装软件和安装包。 压缩包中有: libstdc++-3.4.6-11.i386.rpm libstdc++-devel-3.4.6-11.i386.rpm gcc-c++-3.4.6-11.i386.rpm glibc-2.3.4-2.43.i386.rpm glibc-common-2.3.4-2.43....

    Ubuntu20.04离线安装g++9.3.0依赖包.rar

    在安装好gcc9.3.0的基础上,Ubuntu20.04离线安装g++9.3.0所需要的依赖包

    离线安装 gcc、g++

    离线安装 gcc、g++

    gcc-g++4.8.5离线安装包.rar

    gcc-g++4.8.5离线安装包,解压到linux目录后,执行 rpm -Uvh *.rpm --nodeps --force 完全安装

    Ubuntu18.04离线安装g++和make

    g++-9_9.4.0-1ubuntu1~18.04_amd64.deb gcc-9_9.4.0-1ubuntu1~18.04_amd64.deb make_4.1-9.1ubuntu1_amd64.deb

Global site tag (gtag.js) - Google Analytics