【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 的库文件。