首页 > 其他分享 >g++ 编译顺序问题

g++ 编译顺序问题

时间:2022-09-20 22:55:37浏览次数:51  
标签:顺序 bar foo lib ++ 编译 cpp main

转自:https://blog.csdn.net/sunny04/article/details/17913949

https://cloud.tencent.com/developer/article/1178753

1.问题

g++ -lxxx main.cpp   -o main    //报错undefined reference to
g++  main.cpp -lxxx  -o main    //ok!

 即cpp文件要放到引用的库之前才行。

【大写L】-L:Add directory dir to the list of directories to be searched for -l.

【小写l】-l : Search the library named library when linking.

It makes a difference where in the command you write this option;
    the linker searches and processes libraries and object files in
    the order they are specified. Thus, `foo.o -lz bar.o' searches
    library `z' after file foo.o but before bar.o. If bar.o refers to
    functions in `z', those functions may not be loaded.

上面一段说的非常清楚, foo.o -lz bar.o这样的编译顺序,从左往右编译,在处理foo.o的时候,会查找右边的-l,能够找到z,然后在处理到bar.o的时候,右边没有依赖的库,如果它依赖了z,那么可能就会有找不到依赖的问题!

所以上面第一条命令,将库引用放在cpp之前,那么在处理到cpp的重定位时,向右边找就会找不到。。。

2.总结

在引用动态库时可以使用-L路径【大写】+-lxxx【小写】这种方式;

在引用静态库时直接-llibxxx.a【小写l】即可。

并且二者都要放在最后,,最好都放在最后,“被依赖的库需要放在后头”,引用规则如下:

g++ ...  obj($?) -l(上层逻辑lib) -l(中间封装lib) -l(基础lib) -l(系统lib)  -o $@

 

标签:顺序,bar,foo,lib,++,编译,cpp,main
From: https://www.cnblogs.com/BlueBlueSea/p/16712947.html

相关文章

  • T1031:反向输出一个三位数(信息学一本通C++)
     目录[题目描述]将一个三位数反向输出,例如输入358,反向输出853。[输入]一个三位数n。[输出]反向输出n。[输入样例]100[输出样例]001 #include<iostream>u......
  • T1033:计算线段长度(信息学一本通C++)
     目录[题目描述]已知线段的两个端点的坐标A(Xa,Ya),B(Xb,Yb),求线段AB的长度,保留到小数点后3位。[输入]第一行是两个实数Xa,Ya,即A的坐标。第二行是两个实数Xb,Yb,即B的......
  • T1035:等差数列末项计算(信息学一本通C++)
     目录[题目描述]给出一个等差数列的前两项a1,a2,求第n项是多少。。[输入]一行,包含三个整数a1,a2,na1,a2,n。−100≤a1,a2≤100,0<n≤1000。[输出]一个整数,即第n项的值。。......
  • T1034:计算三角形面积(信息学一本通C++)
     目录[题目描述]平面上有一个三角形,它的三个顶点坐标分别为(x1,y1),(x2,y2),(x3,y3),那么请问这个三角形的面积是多少,精确到小数点后两位。[输入]输入仅一行,包括......
  • T1037:计算2的幂(信息学一本通C++)
     目录[题目描述]非负整数n,求2^n,即2的n次方。。[输入]一个整数n。0≤n<31。[输出]一个实数,即线段AB的长度,保留到小数点后3位。[输入样例]2[输出样例]8 ......
  • C++ shared_ptr
    shared_ptrshared_ptr是C++11提供的一种智能指针类,它足够智能,可以在任何地方都不使用时自动删除相关指针,从而帮助彻底消除内存泄漏和悬空指针的问题。shared_ptr使用引......
  • T1036:A*B问题(信息学一本通C++)
     目录[题目描述]输入两个正整数A和B,求A*B的值。注意乘积的范围和数据类型的选择。[输入]一行,包含两个正整数A和B,中间用单个空格隔开。1≤A,B≤50000。[输出]两......
  • T1039:判断数正负(信息学一本通C++)
     目录[题目描述]给定一个整数NN,判断其正负。如果N>0,输出positive;如果N=0,输出zero;如果N<0,输出negative。[输入]输入一个整数N(−10^9≤N≤10^9)。[输出]如果N>0N>0,......
  • T1038:苹果和虫子(信息学一本通C++)
     目录[题目描述]你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多......
  • T1040:输出绝对值(信息学一本通C++)
     目录[题目描述]输入一个浮点数,输出这个浮点数的绝对值,保留到小数点后两位。[输入]输入一个浮点数,其绝对值不超过10000。[输出]输出这个浮点数的绝对值,保留到小数......