分类: C/C++
2009-08-08 10:32:49
gcc环境变量基础 | |
1.运行时动态库的搜索路径 方法一:在配置文件/etc/ld.so.conf中指定动态库搜索路径 方法二:通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔) 方法三:在编译目标代码时指定该程序的动态库搜索路径(还可以在编译目标代码时指定程序的动态库搜索路径. 这是通过gcc 的参数"-Wl,-rpath,"指定(如例3所示).当指定多个动态库搜索路径时,路径之间用冒号":"分隔) 四:默认的动态库搜索路径/lib 五:默认的动态库搜索路径/usr/lib 动态库的搜索路径搜索的先后顺序是: (1).编译目标代码时指定的动态库搜索路径; (2).环境变量LD_LIBRARY_PATH指定的动态库搜索路径; (3).配置文件/etc/ld.so.conf中指定的动态库搜索路径; (4).默认的动态库搜索路径/lib; (5).默认的动态库搜索路径/usr/lib. 2※预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking) ※include的header文件,连结数据库,系统定义,总共有下列来源指定gcc去那找. 当初在编译时指定的(在~gcc/gcc/collect2.c:locatelib() 写在specs内的 后来用-D -I -L指定的 gcc环境变量设定(编译的时候) ld.so的环境变量(这是run time的时候) =========================================== 1 =========================================== 1.头文件 gcc 在编译时如何去寻找所需要的头文件 : ※所以header file的搜寻会从-I开始 ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH ※再找内定目录 /usr/include /usr/local/include /usr/lib/gcc-lib/i386-linux/2.95.2/include /usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3 /usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include 库文件但是如果装gcc的时候,是有给定的prefix的话,那么就是 /usr/include prefix/include prefix/xxx-xxx-xxx-gnulibc/include prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include 2.库文件 cos()等函式库的选项要多加 -lm 编译的时候: ※gcc会去找-L ※再找gcc的环境变量LIBRARY_PATH ※再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的 ================================================ 2 ================================================2.利用Linux系统上已有的开发库 (1).查看库文件提供了哪些调用 可以用nm命令自己查看库文件提供了哪些调用 (2).通过头文件查看函数的定义 ================================================ 3 ================================================ 3.gcc选项 总体选项 (Overall Option) :(-c(生成目标但不连接) -S(汇编) -E(预处理) -o file(生成指定的文件) -pipe -v(显示过程) -x language (设定文件所使用的语言,使后缀名无效`c', 可用参数`objective-c', `c-header', `c++', `cpp-output', `assembler', and `assembler-with-cpp')) 语言选项 (LANGUAGE OPTIONS) :(-ansi 只支持 ANSI 标准的 C 语法.这一选项将禁止 GNU C 的某些特色) 预处理器选项 (Preprocessor Option) :(-Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H -idirafter dir -include file -imacros file -iprefix file -iwithprefix dir -M -MD -MM -MMD -nostdinc -P -Umacro 相当于C语言中的#undef macro -undef -DMACRO 以字符串“1”定义 MACRO 宏, -DMACRO=DEFN 以字符串“DEFN”定义 MACRO 宏) 汇编器选项 (ASSEMBLER OPTION) :(-Wa,option ) 连接器选项 (LINKER OPTION) :(-llibrary -nostartfiles -nostdlib -static -shared -symbolic -Xlinker option -Wl,option -u symbol ) 目录选项 (DIRECTORY OPTION) :(-Bprefix -Idir -I- -Ldir) 警告选项 (WARNING OPTION) :(-w 不生成任何警告信息,-Wall 生成所有警告信息) 调试选项 (DEBUGGING OPTION) :(-a -dletters -fpretend-float -g -glevel -gcoff -gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+ -ggdb -p -pg -save-temps -print-file-name=library -print-libgcc-file-name -print-prog-name=program ) 优化选项 (OPTIMIZATION OPTION) :(-O0不进行优化处理,-O或-O1优化生成代码 -O2进一步优化 -O3比-O2更进一步优化,包括inline函数) 目标机选项 (TARGET OPTION) :(-b machine -V version ) 机器相关选项 (MACHINE DEPENDENT OPTION):(-m486 针对 486 进行代码优化) 代码生成选项 (CODE GENERATION OPTION) :(-fpic -fPIC) |