Linux C++编程(Vim)


一,编译(compile)

含义:用编译器(compile)将源代码生成二进制目标文件。在Window下为.obj。在Linux下为.o文件。

要求:编译器要求,语法正确。编译器只检测程序语法和函数、变量是否被声明,函数并不许要被定义。

编译语法:g++  -c  file.cpp  其中-c 为compile生成 file.o的目标文件

二,链接(link)

含义:将所有需要到函数所在的文件爱你链接在一起合成为可执行文件。

语法:g++  file.o -o  file.exe  其中-o 指生成可执行文件(output)。默认为a.out

【合并】g++  file.cpp  -o  file.exe

三,库(library)

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

语法: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)。


四, 在编译时链接库

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

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

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

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

相关内容