c++动态/静态库链接顺序
1. gcc中库的链接顺序是从右往左进行,所以要把最基础实现的库放在最后,这样左边的lib就可以调用右边的lib中的代码。同时,当一个函数的实现代码在多个lib都存在时,最左边的lib代码最后link,所以也将最终保存下来。
2. 优先链接动态库
3. 强制使用静态库,直接使用静态库名字 gcc test.cc libxx.a
-L选项指定要搜索库的路径,-l选项指定要链接的库的名称,-o选项指定输出文件的名称。-L 、-l 后可以有空格 也可以不要空格
g++ main.cpp -o main -L /path/to/library -l library_name
g++ main.cpp -o main -static -L /path/to/library -l library_name // 如果动态库.so与静态库.a同时存在,-static指定链接静态库.a,不指定时优先链接动态库so
当使用绝对路径链接时可以去掉 -L 和-l 参数,直接使用库名libxxx.a 或libxxx.so
链接示例:
g++ main.cpp -o main -L/home/user/lib -lxxx 建议使用这种,标准方式
g++ main.cpp -o main /home/user/libxxx.a 或 g++ main.cpp -o main -L/home/user/ /home/user/libxxx.a 绝对路径方式
g++ main.cpp -o main /home/user/libxxx.so 或 g++ main.cpp -o main -L/home/user/ /home/user/libxxx.so 绝对路径方式
注意 g++ main.cpp -o main -L/home/user/ libxxx.so 和 g++ main.cpp -o main -L/home/user/ libxxx.a 是非法的
当前路径下链接时, -L. 代表在当前路径进行搜索
g++ main.cpp -L. -lxxx -o main 标准方式
g++ main.cpp libxxx.a -o main 绝对路径方式
g++ main.cpp libxxx.so -o main 绝对路径方式
注意此时 g++ main.cpp -L. libxxx.a -o main 和 g++ main.cpp -L. libxxx.so -o main 不会报错,是合法的