gcc中的环境变量

本文详细介绍了GCC编译器中可用的环境变量及其作用,包括如何影响编译过程和程序运行,以及如何通过环境变量和命令行选项来定制编译行为。
有大量的环境变量可供设置以影响 GCC 编译程序的方式。利用这些变量的控制也可使用合适的命令行选项。

一些环境变量设置在目录名列表中。这些名字和 PATH 环境变量使用的格式相同。特殊字符 PATH_SEPARATOR (安装编译程序的时候定义)用在目录名之间。在 UNIX 系统中,分隔符是冒号,而 Windows 系统中为分号。

C_INCLUDE_PATH

编译 C 程序时使用该环境变量。该环境变量指定一个或多个目录名列表,查找头文件,就好像在命令行中指定 -isystem 选项一样。会首先查找 -isystem 指定的所有目录。

也见 CPATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。

COMPILER_PATH

该环境变量指定一个或多个目录名列表,如果没有指定 GCC_EXEC_PREFIX 定位子程序,编译程序会在此查找它的子程序。

也见 LIBRARY_PATH 、 GCC_EXEC_PREFIX 和 -B 命令行选项。

CPATH

编译 C 、 C++ 和 Objective-C 程序时使用该环境变量。该环境变量指定一个或多个目录名列表,查找头文件,就好像在命令行中指定 -l 选项一样。会首先查找 -l 指定的所有目录。

也见 C_INCLUDE_PATH 、 CPLUS_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。

CPLUS_INCLUDE_PATH

编译 C++ 程序时使用该环境变量。该环境变量指定一个或多个目录名列表,查找头文件,就好像在命令行中指定 -isystem 选项一样。会首先查找 -isystem 指定的所有目录。

也见 CPATH 、 C_INCLUDE_PATH 和 OBJC_INCLUDE_PATH 。

DEPENDENCIES_OUTPUT

为文件名设置该环境变量会让预处理程序将基于依赖关系的 makefile 规则写入文件。不会包括系统头文件名字。

如果环境变量设置为单名,被看作是文件名字,而依赖关系规则的名字来自源文件名字。如果定义中有两个名字,则第二个名字是用作依赖关系规则的目标名。

设置该环境变量的结果和使用命令行选项 -MM 、 -MF 和 -MT 的组合是一样的。也见 SUNPRO_DEPENDENCIES 。

GCC_EXEC_PREFIX

如 果定义了该环境变量,它会作为编译程序执行的所有子程序名字的前缀。例如,如果将变量设置为 testver 而不是查找 as ,汇编器首先会在名字 testveras 下查找。如果在此没有找到,编译程序会继续根据它的普通名进行查找。可在前缀名中使用斜线指出路径名。

GCC_EXEC_PREFIX 的默认设置为 prefix /lib/gcc-lib/ ,这里的 prefix 是安装编译程序时 configure 脚本指定的名字。该前缀也用于定位标准连接程序文件,包含进来作为可执行程序的一部分。

如果使用 -B 命令行选项,会重写该设置。也见 COMPILER_PATH 。

LANG

该环境变量用于指出编译程序使用的字符集,可创建宽字符文字、串文字和注释。

定义 LANG 为 C-JIS ,指出预处理程序将多字节字符按照 JIS (日语工业标准)字符进行解释。 C-SJIS 可用来指出 Shift -JIS 字符而 C-EUCJP 指出日文 EUC 。

如果没有定义 LANG ,或定义为不可识别,函数 mblen() 被用来确定字符宽度,而 mbtowc() 用来将多字节序列转换为宽字符。

LC_ALL

如果设置,该环境变量的值重写 LC_MESSAGES 和 LC_CTYPE 的所有设置。

LC_CTYPE

该 环境变量指出引用串中定义的多字节字符的字符分类。主要用于确定字符串的字符边界,字符编码需要用引号或转义符,可被错误地解释为字符串的结尾或特殊字符 串。对 Australian English ,可将它设置为 en_AU ; 对 Mexican Spanish ,可将它设置为 es_MX 。如果没有设置该变量,默认为 LANG 变量的值,或如果没有设置 LANG ,那就使用 C 英语行为。也见 LC_ALL 。

LC_MESSAGES

该 环境变量指出编译程序使用何种语言发出诊断消息。对 Australian English ,可设置为 en_AU ; 对 Mexican Spanish ,可设置为 es_MX 。如果变量没有设置,使用 LANG 变量的默认值,或如果没有设置 LANG ,那就使用 C 英语行为。也见 LC_ALL 。

LD_LIBRARY_PATH

该环境变量不会影响编译程序,但程序运行的时候会有影响。变量指定一个目录列表,程序会查找该列表定位共享库。只有当未在编译程序的目录中找到共享库的时候,执行程序必须设置该变量。

LD_RUN_PATH

该环境变量不会影响编译程序,但程序运行的时候会有影响。该变量在运行时指出文件的名字,运行的程序可由此得到它的符号名字和地址。地址不会重新载入,因而可能符号引用其他文件中的绝对地址。这和 ld 工具使用 -R 选项完全一样。

LIBRARY_PATH

该环境变量可设置为一个或多个目录名字列表,连接程序会搜寻该目录,以查找特殊连接程序文件,和由 -l (字母 l )命令行选项指定名字的库。

由 -L 命令行选项指定的目录在环境变量的前面,首先被查找。也见 COMPILER_PATH 。

OBJC_INCLUDE_PATH

在编译 Objective-C 程序的时候使用该环境变量。一个或多个目录名的列表由环境变量指定,用来查找头文件,就好像在命令行中指定 -isystem 选项一样。所有由 -isystem 选项指定的目录会首先被查找。

也见 CPATH 、 CPLUS_INCLUDE_PATH 和 C_INCLUDE_PATH 。

SUNPRO_OUTPUT

为文件名设置该环境变量会令预处理程序将基于依赖关系的 makefile 规则写入文件。会包含系统头文件名。

如果环境变量被设置为单个名字,它将会被当作文件名,依赖关系规则中的名字将由源文件的名字中获得。如果定义中有两个名字,第二个名字就是依赖关系规则中的目标名。

设置该环境变量的结果与在命令行中使用参数 -M 、 -MF 和 -MT 的效果一样。参见 DEPENDENCIES_OUTPUT 。

TMPDIR

这个变量包含了供编译程序存放临时工作文件的目录的路径名。这些文件通常在编译过程结束时被删除。这种文件的一个例子就是由预处理程序输出并输入给编译程序的文件。


### Linux 安装 GCC 并配置环境变量 #### 一、安装 GCC 编译器 在 Ubuntu 或其他基于 Debian 的发行版中,可以通过包管理工具 `apt` 来安装 GCC。以下是具体操作: 运行以下命令来更新软件源列表并安装 GCC: ```bash sudo apt update && sudo apt install build-essential ``` 这会自动安装 GCC 和其依赖项[^1]。 对于 CentOS/RHEL 系统,则可以使用 `yum` 命令完成相同的操作: ```bash sudo yum groupinstall "Development Tools" ``` #### 二、验证 GCC 是否成功安装 通过以下命令检查 GCC 版本号以确认安装是否成功: ```bash gcc --version ``` 如果返回版本信息则表示安装成功[^2]。 #### 三、手动下载和编译 GCC (可选) 当需要特定版本的 GCC 而官方仓库不提供时,可以选择从官网下载源码自行编译。步骤如下: 1. 下载目标版本的 tarball 文件; 2. 解压后进入解压目录执行配置脚本; 3. 使用 make 构建项目; 4. 将构建好的程序拷贝至系统路径下或者自定义位置。 例如: ```bash tar -xf gcc-x.x.x.tar.gz cd gcc-x.x.x ./configure --prefix=/usr/local/gcc-x.x.x make -j$(nproc) sudo make install ``` #### 四、设置环境变量 为了能够在任意终端窗口调用新安装的 GCC 工具链而无需输入完整路径名,需将其加入系统的 PATH 变量之中。 ##### 方法 A: 修改全局 profile (/etc/profile) 编辑 `/etc/profile` 文件,在最后一行追加导出语句: ```bash export PATH="/usr/local/gcc-x.x.x/bin:$PATH" ``` 保存退出后再刷新当前 session 让更改即时生效: ```bash source /etc/profile ``` ##### 方法 B: 用户级 .bashrc (~/.bashrc) 针对单个用户的个性化需求,可以直接修改家目录下的 `.bashrc` 文件实现同样的效果: ```bash echo 'export PATH="$HOME/tools/gcc-x.x.x/bin:$PATH"' >> ~/.bashrc source ~/.bashrc ``` 以上两种方式任选一种即可满足日常开发所需[^3]。 #### 五、解决动态链接库缺失错误 有时即使设置了正确的路径仍会出现诸如“error while loading shared libraries”的提示消息。这是因为某些必要的共享对象(.so)未被加载所致。此时应考虑调整 LD_LIBRARY_PATH 参数或将对应 lib 子目录同步添加进 path 中去。 比如假设这些 so 文件位于 `/opt/mylibs/lib` 则做如下处理: ```bash export LD_LIBRARY_PATH=/opt/mylibs/lib:$LD_LIBRARY_PATH ``` 最后记得再次激活 shell 进程使得改动实时反映出来。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值