g++编译笔记

一些注意点

  1. 动态库相关环境变量:
export LIBRARY_PATH=LIBDIR1:LIBDIR2:$LIBRARY_PATH # 编译期间动态库路径
export LD_LIBRARY_PATH=LIBDIR1:LIBDIR2:$LD_LIBRARY_PATH # 二进制程序加载动态库路径
  1. 静态库编译:
g++ -c base.cpp -o libbase.o
ar -rs libbase.a libbase.o
  1. 动态库编译,同时链接一个静态库:
g++ -fPIC -shared -I. -L. -lbase son.cpp  -o libson.so 

其中-I 是指定头文件目录,-L指定库目录,可以重复多个

  1. 添加链接库时,如果库之间有依赖关系,则被依赖的库要后置,例如:g++ -I. -L. -lobj -lbase main.cpp -o main,其中obj依赖base。

  2. 链接库时,默认规则是优先选择动态库,找不到再找静态库。

一些实例

依赖关系:base->son->main

静态编译libbase.a,动态编译libson.so

编译main的时候仍需指定链接静态库

g++ -c base.cpp -o base.o
ar -rcs libbase.a base.o
g++ -fPIC -shared -I. -L. -lbase son.cpp -o libson.so
g++ -I. -L. -lson -lbase main_obj.cpp -o main 

makefile经典问答

@变量的含义 https://stackoverflow.com/questions/3220277/what-do-the-makefile-symbols-and-mean
target::
do something
相当于每次都可以触发

posted @ 2023-01-11 17:03  crazy_fz  阅读(31)  评论(0编辑  收藏  举报