gcc 的使用

编译

  • -E 进行预处理

  • -S 生成对应的汇编文件

  • -c 生成对应的二进制可执行文件

  • ld 对所需要的库和头文件进行链接

  • -lstdc++ 对 c++文件进行编译操作

  • -o 直接生成对应可执行文件

  • -L 包含的库路径

  • -l(小写 L) 指定库名

  • -I(大写 I) 指定头文件路径

通常库名为 libxxx.so(动态库)或者 libxxx.a(静态库),指定时只需要输入 xxx 的部分

例如:gcc test.c -o test -L /lib -lxxx

  • -D 指定宏编译
  • -g gdb 调试,不加该选项不能使用 gdb 调试

g++

编译 c++的文件,用法和 gcc 类似

可以使用类似-std=c++2a,指定所使用的 c++标准

制作库文件

  • 静态库

    • 编译为.o 文件(二进制可执行文件)
    • 将.o 文件进行打包

    使用’’ar rsc +发布的库名+需要打包的文件名’’ 命令进行打包

    例如:ar rsc libxxx.a *.o

    • 将头文件和库文件一起发布
  • 动态库

    • 编译与位置无关的代码,生成.o 文件

    使用参数 -fPIC(声明与位置无关)

    • 将.o 文件打包(使用**-shared**参数)

    -o 指定库名,加上所需文件

    例如:gcc -shared -o libxxx.so *.o

    • 将头文件和库文件一起发布
  • 优缺点对比

    • 静态库执行快,发布时不需要发布库,但是执行程序体积会比较大,库变更时候需要重新编译应用
    • 动态库执行相对较慢,发布需要发布库,但执行程序体积相对较小,库变更时,一般不需要重新编译应用