zgmf x12a:GCC的参数详解

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 20:31:23
编译时将自己的头文件目录设为默认头文件目录
$gcc -I”Your_Include_Files_Document_Path” -c yours.c -o yours.o
这条指令中的-I参数将会把Your_Include_Files_Document_Path添加到你默认的头文件目录中。这样您将可以使用#include 来导入头文件。
编译时使用自己的静态库存放目录
$gcc -L”Your_Lib_Files_Document_Path” -o yours yours.o
这条指令将会让GCC在连接时除了在默认Lib存放目录中搜索指定的静态库以外,还会在Your_Lib_Files_Document_Path中搜索。
编译时使用静态连接库
$gcc -lyour_lib -o yours yours.o
这条指令将会让GCC在连接时把libyour_lib.a中您所用到的函数连接到可执行程序中。此处注意,GCC所使用的静态连接库是lib*.a格式的。在连接时,只且仅需要提供*的内容就可以了。
-static
此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么动态连接库,就可以运行
-share
此选项将尽量使用动态库,所以生成文件比较小,但是需要系统的动态库
Makefile里 LIBS 和 LDFLAGS 的区别
经常在LIBS那里写“-L...”,在LDFLAGS那里写“-Wl,-rpath,...”
其表示:LDFLAGS是选项,LIBS是要链接的库。
**********************************************************************************************
MAKEFILE中 LIBS 和 INCLUDES 的编写
一、比如你的头文件放在 /home/abc/my_include/下,库放在 /home/abc/my_lib/下(比如 libsomelib.a)
就可以:gcc -I /home/abc/my_include/ -L /home/abc/my/my_lib/ -lsomelib test.x -o test
注意:库文件名字一般都是 lib(XXX).a,而引用的时候 就是 -lXXX了。
二、可以用 -L 库文件路径 和 -I 头文件路径 来加入用户自定义的库和头文件
比如:gcc -I /usr/myhead/ -I /home/newhead/ -L /usr/lib/ -L /home/newlib/ -lmylib -lyourlid test.c -o test
编译链接时,编译器就会去你指定的N个头文件目录和库目录去找相应的文件
PATH:大家应该都很熟悉。安装一个包后可能会在安装目录建立一个bin目录,里面都是些可执行程序,为了让系统能找到这些程序,就需要我们把该路径加入到PATH环境变量中。下面会讲到如何加入。
LDFLAGS:gcc等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。用法:LDFLAGS=“-L/usr/lib -L/path/to/your/lib”。每安装一个包都几乎一定的会在安装目录里建立一个lib目录。如果你明明安装了某个包,而安装另一个包时,它愣是说找不到,那就把那个包的lib路径加入的LDFALGS中试一下吧。
CFLAGS:和LDFLAGS类似,只不过要向里加如的是头文件(.h文件)的路径,如:CFLAGS=“-I/usr/include -I/path/to/your/include”。同样地,安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include目录加入到该变量中来。
那如何在那些变量中加入这些路径呢?以PATH变量为例。
一种方法是:直接在命令行下:
$ PATH="$PATH:/path/to/your/bin:/another/path/to/bin"
$ export PATH
这种方法的好处是方便,立即生效,缺点是把当前会话或shell关了之后就失效了,下次还得运行一遍。
另一种方法是:把下面的两行内容加入到~/.bashrc文件中,如果想让其影响到整个系统而不仅仅是当前用户,就把下面的内容加入到/etc/bash.bashrc(记得有的系统是/etc/bashrc这个文件)PATH="$PATH:/path/to/your/bin:/another/path/to/bin"
export PATH
然后,重新启动shell即可。
需要注意的是,PATH变量的分隔符是:号,其他的是空格,
所以LDFLAGS应该是这样:
LDFLAGS=“$LDFLAGS -L/path/to/lib -L/path/to/lib”
CFLAGS应该是这样:
CFLAGS=“$CFLAGS -I/path/to/iclude -I/path/to/include”