Linux下gcc使用经验总结
1.gcc的常用参数:
I(大写i)参数:添加头文件目录到索引目录;例如:-I /usr/local/include/
L参数:添加链接库目录到索引目录;例如:-L /usr/local/lib/
l(小写L):表示编译时添加链接库文件;例如:-ltest(参数与内容中间没空格)代表着连接(库名为test)链接库文件,库名和实际文件名是不同的,库名是文件名去掉开头的lib和结尾的.a或.so后的名字,比如文件名为libmy.a的链接库的库名是my
2.gcc的机制:
3.静态库问题:
假设gcc已经生成了a.o, b.o, c.o,使用下面的命令即可生成libmylib.a
#ar rcs libmylib.a a.o b.o c.o
4.动态库问题:
假设a.c, b.c两个文件,通过下面的命令可生成libmylib.so
#gcc -shared -o libmylib.so a.c b.c
5.gcc的使用问题:
这就涉及到符号空穴的实现问题。
Sam猜测:因为编译器从左向右读取文件, 当读到-lm时,因为是静态的,但此时还不知道该把哪个符号抽出来。所以只好往后继续处理,等在main.o中发现
*UND* 00000000 sqrt, 也就是这个符号需要填入时,后面的文件却没有这个符号的实现。所以就报错了。
gcc -o test -static test.o -lm
编译成功。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。