Linux c++开发-02-g++命令行编译

有如下的文件目录结构
在这里插入图片描述

格式一

swap.h
在这里插入图片描述
swap.cpp
在这里插入图片描述
main.cpp
在这里插入图片描述

编译方法和结果如下:
在这里插入图片描述

格式二

swap.cpp
在这里插入图片描述
main.cpp
在这里插入图片描述
使用命令:g++ main.cpp src/swap.cpp -o main.exe
在这里插入图片描述
解决方法使用参数 -I
在这里插入图片描述

格式三-将swap.cpp生成一个静态库然后链接到main.cpp中

静态库:一般以lib开头的.a文件,eg:libmymath.a

  1. 生成可重定位目标文件 *.o文件 汇编阶段
    在这里插入图片描述

  2. 归档,生成静态库
    在这里插入图片描述
    在linux中 静态库以.a结尾,动态库以.so结尾
    在这里插入图片描述

  • -l(小写)用来指定程序要连接的库,-l紧接着就是库名
  • -L,跟着库文件的目录名
  • -I(大写)指定头文件的搜索目录

格式四-动态库

动态库:一般以lib开头的.so文件,eg:libmymath.so

-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。
在这里插入图片描述
但此刻是没法运行的,如下:
在这里插入图片描述
解决方法如下(LD_LIBRARY_PATH)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/FairLikeSnow/article/details/132523564