background image

法就是 pkg-config pagName --libs --cflags,其中 pagName 是包名,是 pkg-config--list-all 里
列出名单中的一个,比如 gtk1.2 的名字就是 gtk+,pkg-config gtk+ --libs --cflags 的作用跟
gtk-config --libs --cflags 是一样的。比如:gcc gtktest.c `pkg-config gtk+ --libs --cflags`

 

。 5.-

include 和-I 参数
-include 用来包含头文件,但一般情况下包含头文件都在源码里用# include xxxxxx 实
现,-include 参数很少用。-I 参数是用来指定头文件目录,/usr/include 目录一般是不用指定
的,gcc 知道去那里找,但是如果头文件不在/usr/include 里我们就要用-I 参数指定了,比
如头文件放在/myinclude 目录里,那编译命令行就要加上-I/myinclude 参数了,如果不加
你会得到一个"xxxx.h: No such file or directory"的错误。-I 参数可以用相对路径,比如头文
件在当前目录,可以用-I.来指定。上面我们提到的--cflags 参数就是用来生成-I

 

参数的。6.-

O 参数
这是一个程序优化参数,一般用-O2 就是,用来优化程序用的,比如 gcc test.c -O2,优化

 

得到的程序比没优化的要小,执行速度可能也有所提高(我没有测试过)。7.-shared 参数
编译动态库时要用到,比如 gcc -shared test.c -o libtest.so 8.几个相关的环境变量
PKG_CONFIG_PATH : 用 来 指 定 pkg-config 用 到 的 pc 文 件 的 路 径 , 默 认
是/usr/lib/pkgconfig,pc 文件是文本文件,扩展名是 .pc,里面定义开发包的安装路径 ,
Libs 参数和 Cflags 参数等等。
CC:用来指定 c

 

编译器。CXX:用来指定 cxx

 

编译器。LIBS:跟上面的--libs 作用差不多。 

CFLAGS:跟上面的--cflags 作用差不多。
CC,CXX,LIBS,CFLAGS 手动编译时一般用不上,在做 configure 时有时用到,一般情

下不用管。
环境变量设定方法:export ENV_NAME=xxxxxxxxxxxxxxxxx 9.关于交叉编译
交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上,比
如在我们地 PC 平台(X86 CPU)上编译出能运行在 sparc CPU 平台上的程序,编译得到的
程序在 X86 CPU 平台上是不能运行的,必须放到 sparc CPU 平台上才能运行。当然两个平
台用的都是 linux。这种方法在异平台移植和嵌入式开发时用得非常普遍。
相对与交叉编译,我们平常做的编译就叫本地编译,也就是在当前平台编译,编译得到
的程序也是在本地执行。
用来编译这种程序的编译器就叫交叉编译器,相对来说,用来做本地编译的就叫本地编
译器,一般用的都是 gcc,但这种 gcc 跟本地的 gcc 编译器是不一样的,需要在编译 gcc
时用特定的 configure 参数才能得到支持交叉编译的 gcc。
为了不跟本地编译器混淆,交叉编译器的名字一般都有前缀,比如 sparc-xxxx-linux-gnu-
gcc,sparc-xxxx-linux-gnu-g++ 

 

等等 10.交叉编译器的使用方法

使用方法跟本地的 gcc 差不多,但有一点特殊的是:必须用-L 和-I 参数指定编译器用
sparc 系统的库和头文件,不能用本地(X86)的库(头文件有时可以用本地的)。
例子:sparc-xxxx-linux-gnu-gcc test.c -L/path/to/sparcLib -I/path/to/sparcInclude 附:gcc/egcs 
的主要选项
-ansi 

 

只支持 ANSI 

 

标准的 C 

 

语法。这一选项将禁止 GNU C 

 

的某些特色,例如 asm 或 

typeof 关键词。
-c 只编译并生成目标文件。
-DMACRO 

以字符串 1”

 

定义 MACRO 宏。

-DMACRO=DEFN 

以字符串 DEFN”

 

定义 MACRO 

 

宏。 -E 

 

只运行 C 预编译器。

-g 生成调试信息。GNU 调试器可利用该信息。