g++环境配置

查看g++/gcc环境

对于

echo | gcc -v -x c++ -E -  


对于C++

echo | g++ -v -x c++ -E -


g++/gcc选项


添加运行时共享库目录

运行使用共享库的程序需要加载共享库(不同于G++ 编译时指定的链接库),添加共享库的步骤:

  1. 修改文件 /etc/ld.so.conf 添加共享库目录
  2. 运行 ldconfig 同步更新一下

如:

?
1
2
3
gedit /etc/ld .so.conf
     #添加 /root/dreamlove/lib
ldconfig

添加include,lib的搜寻路径

对所有用户有效修改/etc/profile 
对个人有效则修改~/.bashrc 
#在PATH中找到可执行文件程序的路径。 export PATH =$PATH:$HOME/bin 
#gcc找到头文件的路径 C_INCLUDE_PATH=/usr/include/libxml2:/MyLib export C_INCLUDE_PATH 
#g++找到头文件的路径 CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/libxml2:/MyLib export CPLUS_INCLUDE_PATH 
#找到动态链接库的路径 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/MyLib export LD_LIBRARY_PATH 

#找到静态库的路径 LIBRARY_PATH=$LIBRARY_PATH:/MyLib export LIBRARY_PATH
使用source,加载这些定义使其立即生效;或者重启

g++编译时的流程

  • 调用预编器CPP进行预处理,生成.i文件
  • 调用编译器egcs进行汇编,生成.s文件
  • 调用汇编器as生成目标,.o文件
  • 调用连接器ld进行链接,生成可执行文

g++使用注意项

用于链接库的 -l 选项必须放在 g++ 选项后面,如:

?
1
2
3
g++ -o . /tmpExec/pthread pthread.cpp -lpthread
     #这个是正确的
g++ -lpthread -o . /tmpExec/pthread pthead.cpp #出错


应该注意的选项

MM选项与M选项

生成文件的依赖关系,比如:g++ -MM testMM.cpp;将依赖关系输出到屏幕上,此时应该对其进行重定向;-MM是不会进行语法检查的。只是对源文件的include关系进行分析得到依赖关系;如

?
1
2
3
4
5
6
7
#include <unistd.h>
#include "geteth0Ip.h"
 
int mian(){
     return ;
}
//这个漏洞百出的源文件仍然可以使用-MM获得它的依赖关系
与 makefile 的使用: 
?
1
2
3
$(dfiles):%.d:%.cpp
     @g++   -MM  $< | sed  '$ a\\tg++ -c -o $(ObjsDir)/$(patsubst %.d,%.o,$@) $<' >$(DsDir)/$@
     # 使得每一个 .d 文件都包含着一个完整的规则



常用选项

g++ -fsigned-char -o test.exe hello.cpp
选项参数描述例子
-x'c|c++|..|'不再根据源文件的后缀名来判断编写源文件的语言,即指定源文件的语言g++ -x 'c++' test.txt
-E
只执行编译的第一个流程:预处理,不会生成文件,可以重定向到文件g++ -E test.cpp
-S
执行编译的前两个流程生成汇编代码g++ -S test.cpp
-c
执行前三个流程生成目标文件g++ -c test.cpp
-o目标文件名重命名目标文件名g++ -S -o test.asm test.cpp
-pipe
使用管道来存储文件,下一个流程从/tmp/文件夹中读取上一个流程的结果,使用pipe后,上一个流程将结果保存在内存中,下一个流程直接从内存中读取上一个流程的结果g++ -pipe -o test.exe test.cpp
-ansi
关闭gun的特性,使代码全面符合ansi要求,从而具有高移植性g++ -ansi -o test.ext test.cpp
-fno-asm
-ansi的一部分:将asm,inline,typeof视为普通标识符g++ -fno-asm -o test.exe test.cpp
-fno-strict-prototype
不再支持
-fthis-is-variable
不再支持
-fcond-mismatch
允许条件表达式的第2,3个参数的类型不一致,现已默认开启默认开启
-funsigned-char
-fno-signed-char
-fsigned-char
-fno-unsigned-char

对char类型进行设置,决定将char类型设置成unsigned char(前两个参数)或者signed char(后两个参数)
-imacros包含宏的文件相当于include,可以直接使用参数文件里的宏g++ -imacros hello.mac hello.cpp
-Dmacro
-Dmacro=defn
macro为参数相当于#define macrog++ -DUNICODE -o test.exe hello.cpp
-Umacromacro为参数相当于#undef macro,不能取消在文本文件中定义的宏!g++ -UUNICODE -o test.exe hello.cpp
-undef
取消对任何非标准宏的定义g++ -undef -o test.exe hello.cpp
-Idirdir就是参数一般查找头文件顺序:-I指定的目录->当前目录->环境变量定义的目录g++ -I'C:/Users/Dream/Desktop/' -o test.exe hello.cpp
-nostdinc
使编译器不在系统缺省的头文件目录里面找头文件g++ -nostdinc -o test.exe -c hello.cpp
-C
在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的g++ -E -C -o test.h hello.cpp
-M
生成文件关联的信息。包含目标文件所依赖的所有源文件,这个在制作makefile应该会很有用g++ -M -o test1.h hello.cpp
-MM
同-M,不过忽略#include<file>>造成的依赖关系g++ -MM -o test.h hello.cpp
-Waoptions传递参数给as(汇编器)
-Wloptions传递参数为ld(连接器)
-llibslib就是参数指定编译的时候所使用的库,liblibs.so(如果static选项设置的话就是liblibs.a)g++ -lprint hello.cpp(链接 libprint.so)
-Ldirdir就是参数指定查找链接库时的目录g++ -L'C:/Users/Dream/Desktop/' -lprint hello.cpp
-Onn为参数,表示优化等级取:0,1,2,3进行相应程度的优化g++ -O3 -o test3.asm -S hello.cpp
-g
-ggdb
-gstabs
-gstabe+

生成调试信息,可以被gdb使用
尽可能地生成gdb格式的调试信息
生成stabs格式的调试信息
同时shengc stabs,gdb格式的信息
g++ -g hello.cpp




G++和GCC使用的环境变量 -Iinclude -Llibpath -llibname  

http://blog.163.com/xychenbaihu@yeah/blog/static/1322296552010102144057844/

G++和GCC使用的环境变量 -Iinclude -Llibpath -llibname  

2010-11-21 16:40:57|  分类: Linux常用工具|举报|字号 订阅

1、CPATH或C_INCLUDE_PATH               //存放自动加载头文件的位置
     用逗号分隔的目录列表,以提供头文件的搜索位置。
     相当于在使用gcc或g++是,-Idirectory。(头文件所在的位置)!
 
 
2、COMPILER_PATH                               //gcc和g++子程序的位置
      用逗号隔开的目录列表,以提供gcc或g++子程序的搜索位置。
 
3、GCC_EXEC_PERFIX
      ....
 
4、LIBRARY_PATH                                   //自动搜索库的路径
     用逗号隔开的目录列表,以提供链接器寻找连接库(动态连接库,静态连接库)的位置。
     相当于在命令里使用-Ldirectory
 
5、LD_LIBRARY_PATH                            //动态搜索加载动态库的路径
     用逗号隔开的目录列表,用来提供共享连接库(动态连接库)文件的搜索位置。这个环境变量是程序在执行是使用的。
     ldd   ./可执行程序名
     将看到可执行程序在执行时连接动态库的过程。
 
6、TMPATH                                             //gcc或g++编译过程中,临时文件存放的目录
      gcc编译过程中临时文件使用的目录。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值