1、路径设置
在生成gcc的时候,给他指定了头文件和库文件的默认搜索路径,可通过gcc –v命令获取,如下:
Usingbuilt-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6.1/lto-wrapper
Target:i686-linux-gnu
Configured with:../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.1-9ubuntu3'--with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs--enable-languages=c,c++,fortran,objc,obj-c++,go --prefix=/usr--program-suffix=-4.6 --enable-shared --enable-linker-build-id--with-system-zlib --libexecdir=/usr/lib --without-included-gettext--enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6--libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu--enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin--enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686--with-tune=generic --enable-checking=release --build=i686-linux-gnu--host=i686-linux-gnu --target=i686-linux-gnu
Thread model:posix
gcc version 4.6.1(Ubuntu/Linaro 4.6.1-9ubuntu3)
从上面输出可以看出,默认的头文件目录为/usr,即通过—prefix指定,而库文件目录位于/usr/lib,通过-libdir指定,常规编译时,gcc总是先到指定标准目录里寻找头文件等,如果不想使用标准的C库,则可以-nostdinc和-nostdlib禁止掉所有的标准头文件和库文件的搜索目录,之后在命令行通过-I 和-L 指定想要的头文件目录和库文件目录。
2、中间编译选项
Gcc 几个重要的编译选项如下:
-E 只做预处理,生成.i的预处理文件
-S 只做汇编处理,生成.s的汇编文件
-o 指定目标文件名
-c 只做编译,生成obj文件后不做连接
3、生成库文件
库文件分为动态库和静态库,两种库文件都是通过.o目标文件生成的,静态库文件生成步骤如下:
gcc–c my.c
arcrv libmy.a my.o 静态库文件必须以lib为前缀,紧跟静态库名,扩展名为.a
静态库的使用很简单:
Gcc–o test test.c –L. –lmy 注意-l的后面为my,而不是libmy
动态库的创建也是先生成.o目标文件,然后使用下面的命令:
gcc–shared –Fpci –o libmy.so my.o 动态库文件也以lib为前缀,扩展名为.so
动态库的使用和静态库的使用采用同样的命令,不过在执行程序时,要记得把动态库拷贝到系统动态共享库目录中去。
Gcc在连接时,如果同时发现了动态库和静态库,则优先使用动态库,可通过-static来强制使用静态库。