2011年(18)
分类: WINDOWS
2011-04-26 14:02:36
1、 linux C 编程的时候,gcc会默认在/usr/include目录下寻找头文文件,这个目录是标准库文件所在目录,非标准的库一般情况下是不直接放在这里的。
2、gcc进行编译的时候有三个选项,这里记录一下,当时在看参考资料的时候,只是因为这几个选项没明白,对后面的理解就没有很好。
-l 选项 (小写L)
参数显式链接需要链接的库
-Idir
选项
把目录添加到寻找头文件的目录列表中,由-I选项指定的目录会在标准库文件目录之前被寻找,如果指定的目录是标准库文件目录,该目录会被忽略。
-Ldir 选项
和 -I 选项一样功能。
3、静态库
缺点是占用空间,如果被多处用的,修改的时候会很痛苦。但是程序的可移植性比较好。
4、动态库
动态库的出现避免了静态库的缺点。
5、静态库是在链接阶段被链接的,动态库是在程序执行的时候被链接的。即使程序编译完成之后,库仍然需要保留在系统上,以备程序运行时的调用。由于种种原因,链接时是优先链接动态库的,如果不成功,则链接静态库。除非用-static参数指定链接静态库。(这里的话大部分是引用的,我不是搞开发的,知道个大概就可以了,呵呵)。
6、3种方法是自己的非标准库被gcc找到
6.1、把自己的库放到/lib,/usr/lib下
6.2、编辑/etc/ld.so.conf文件,把当前路径加入,然后运行ldconfig,或者以当前路径为参数运行ldconfig(root权限)。
6.3、把当前路径加入环境变量LD_LIBRARY_PATH中
7、创建静态库
7.1、多步操作
archive
7.2、命令操作
8、创建动态库
只要把上个命令中的-static参数去掉就可以了。
9、如何判断一个程序有没有链接动态库?
9.1、file
9.2、ldd
ldd是用来打印目标程序(由命令行参数指定)所链接的所有动态库的信息的,如果目标程序没有链接动态库,则打印“not a dynamic executable”。
9.3、file和ldd结果(引用)
10、参考资料
http://blogold.chinaunix.net/u1/52743/showart_2025225.html