Chinaunix首页 | 论坛 | 博客
  • 博客访问: 542341
  • 博文数量: 182
  • 博客积分: 2088
  • 博客等级: 大尉
  • 技术积分: 1698
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-16 15:09
个人简介

.

文章分类

全部博文(182)

文章存档

2016年(1)

2015年(18)

2014年(14)

2013年(20)

2012年(129)

分类: C/C++

2015-08-17 20:24:57

gcc生成静态链接库

gcc -c file1.c 
gcc -c file2.c 
ar crv my_library.a file1.o file2.o 
注意,用gcc链接静态库的时候,-l要放在xxx.c后面 
-I -l -L 
系统头文件路径是:/usr/include,如果引用的头文件不在系统路径下,那么需要用-Ipath来指明头文件的目录。 
静态链接库的系统路径是:/lib, /usr/lib, /usr/local/lib,引用系统路径下的库文件只要加上-lxxx即可(如果库名是libxxx.a,那么为-lxxx)。 
如果保存静态库的路径不是系统路径,那么需要使用-Lpath来指明库的路径

静态库链接时搜索路径: 
1) ld会去找GCC命令中的参数-L 
2) 再找gcc的环境变量LIBRARY_PATH 
3) 再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的

gcc生成动态链接库

gcc -fPIC -shared file1.c file2.c -o my_library.so 
动态库如果没有保存在系统库的路径下,那么应用程序在运行时需要通过export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:path来指定动态库的路径

动态库链接时搜索路径: 
1) 编译目标代码时指定的动态库搜索路径 
2) 环境变量LD_LIBRARY_PATH指定的动态库搜索路径 
3) 配置文件/etc/ld.so.conf中指定的动态库搜索路径 
4) 默认的动态库搜索路径/lib 
5) 默认的动态库搜索路径/usr/lib

有关环境变量: 
LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径 
LD_LIBRARY_PATH环境变量:指定程序动态链接库文件搜索路径 
LIBRARY_PATH和LD_LIBRARY_PATH是在链接的时候gcc查找的库文件路径,当程序在运行时查找库文件需通过LD_LIBRARY_PATH或RUN_LIBRARY_PATH指定

强制链接时使用静态链接库

默认情况下,gcc在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库,如果需要的话,可以在编译时加上-static选项来强制使用静态链接库。 
如:gcc -L/path/lib -static -lxxx test.c -o test

warn选项

-Werror 
make all warning into errors 
-Wall(打开大部分检查,不是所有) 
This enables all the warnings about constructions that some users consider questionable, and that are easy to avoid 
(or modify to prevent the warning), even in conjunction with macros. This also enables some language-specific warnings 
described in C++ Dialect Options and Objective-C and Objective-C++ Dialect Options. 
-Wall turns on the following warning flags:

-Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration -Wcomment -Wformat -Wmain (only for C/ObjC and unless -ffreestanding) 
-Wmissing-braces -Wnonnull -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type -Wsequence-point -Wsign-compare (only in C++) -Wstrict-aliasing -Wstrict-overflow=1 -Wswitch -Wtrigraphs 
-Wuninitialized -Wunknown-pragmas -Wunused-function -Wunused-label -Wunused-value -Wunused-variable -Wvolatile-register-var

-Wextra 
This enables some extra warning flags that are not enabled by -Wall. 
(This option used to be called -W. The older name is still supported, but 
the newer name is more descriptive.)

-g

生成可执行文件中包含gdb调试信息,发生异常时会产生core文件。

-O[level]

指定优化等级,level数字越大优化程序越高,需要的编译时间也越长。默认是-O0,许多程序员喜欢用-O2,因为他在优化长度,编译时间和代码之间取得一个比较理想的平衡点。

-DMACRO

以字符串”1”定义MACRO宏 
如果在源代码中使用

#ifdef MACRO 
… 
#endif

则源代码会根据gcc编译选项编译 
使用方法参考:http://blog.csdn.net/luckywang1103/article/details/31821857

-DMACRO=DEFN

以字符串”DEFN”定义MACRO宏

-fPIC

-fPIC作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任何位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。

-shared

编译源代码为动态链接库,如gcc -fPIC -shared test.c -o libtest.so

-E -S -c -o

-E 仅预处理 gcc -E test.c -o test.i 
-S 仅预处理和编译 gcc -S test.c -o test.s 
-c 预处理、编译和汇编 gcc -c test1.c test2.c生成各自的目标文件test1.o test2.o 
-o output_filename 生成指定文件,如果没有指定,生成a.out

-Lpath -Ipath -l

如果代码中只使用c的标准库(libc.a libc.so),不需要指定选项 
如果使用了非标准库,且该库文件及库的头文件位于默认目录,需要使用-lxxx,例如使用了libm.a或libm.so,需要指定-lm 
如果使用了非标准库,且该库文件及库的头文件不在默认目录,需要使用-Ipath指定库的头文件所在目录,-Lpath指定库文件所在位置,-lxxx指定使用的库


转载地址: http://blog.csdn.net/luckywang1103/article/details/45078587
阅读(904) | 评论(0) | 转发(0) |
0

上一篇:Android.mk中输出打印信息

下一篇:fio

给主人留下些什么吧!~~