【韦东山Linux学习】学习笔记(汇总版)

在这里插入图片描述

GCC

  • 预处理(.c/.cpp)、编译()、汇编、链接
    在这里插入图片描述

使用动态链接库

  • 生成.o文件:arm-linux-gnueabihf-gcc -c -o sub.o sub.c
  • 生成动态链接库:arm-linux-gnueabihf-gcc -shared -o libsub.so sub.o
  • 使用动态链接库生成可执行文件:arm-linux-gnueabihf-gcc -o test main.o -lsub -L ./
    • 注意-lsub之间没有空格
    • sub库并没有位于工具链的lib目录,所以我们需要指定目录,-L ./指定库所在的目录为当前目录
  • 注意:使用动态链接库交叉编译生成的可执行程序,传输到板子上时,需要把动态链接库libusb.so放到板子对应的/lib目录
    • 如果不放到板子对应的/lib目录,则需要重新运行以下程序(放到/a目录为例)
      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/a 然后运行./test

使用静态链接库

  • 生成.o文件:arm-linux-gnueabihf-gcc -c -o sub.o sub.c
  • 生成静态链接库:ar crs libsub.a sub.o(可以使用多个.o生成静态库)
  • 使用静态链接库生成可执行文件rm-linux-gnueabihf-gcc -o test main.o libsub.a (如果.a不在当`前目录下,需要指定它的绝对或相对路径)
  • 注意:静态链接库不需要放到板子上!!!

GCC编译一些很有用的选项

  • gcc -E main.c // 查看预处理结果,比如头文件是哪个
  • gcc -E -dM main.c > 1.txt // 把所有的宏展开,存在1.txt里
  • gcc -Wp,-MD,abc.dep -c -o main.o main.c // 生成依赖文件abc.dep,后面Makefile会用
发布了695 篇原创文章 · 获赞 1135 · 访问量 80万+

猜你喜欢

转载自blog.csdn.net/ReCclay/article/details/104877225