configure: error: C compiler cannot create executables编译错误的解决办法的思路分析

当遇到"configure: error: C compiler cannot create executables"的编译错误时,通过查看`config.log`文件发现是由于找不到arm-linux-gcc编译器导致。解决方法是确保交叉编译器已配置且在root权限下运行编译脚本。
 

编译错误:
zyx@zyx:/opt/EmbedSky/Qte$ sudo ./arm-qtopia-2.2.0-konqueror_build
[sudo] password for zyx:
the qpe program is already !
the konqueror directory is already !
Build konqueror , please wait ...

configure: WARNING: If you wanted to set the --build type, don't use --host.
    If a cross compiler is detected then cross compile mode will be used.
checking build system type... i686-pc-linux-gnu
checking host system type... arm-unknown-linux-gnu
checking target system type... arm-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking for -p flag to install... yes
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking for arm-linux-strip... arm-linux-strip
checking for style of include used by make... GNU
checking for arm-linux-gcc... arm-linux-gcc
checking for C compiler default output... configure: error: C compiler cannot create executables
See `config.log' for more details.
make: *** No targets specified and no makefile found.  Stop.
zyx@zyx:/opt/EmbedSky/Qte$

思路分析:
首先在网上查到一些解决办法:
zyx@zyx:~$ sudo apt-get install build-essential
zyx@zyx:~$ sudo apt-get install libc6-dev
但重新编译以后错误仍然存在,看来不行。
我看到了倒数第二句:"See `config.log' for more details."
使用locate命令确定config.log的位置,如下。
zyx@zyx:/$ locate config.log
/opt/EmbedSky/Qte/arm-qtopia-2.2.0/konqueror/config.log
/opt/EmbedSky/Qte/arm-qtopia-2.2.0/tslib-1.4.1/config.log
/opt/EmbedSky/Qte/arm-qtopia-2.2.0   z/konqueror/config.log
/opt/EmbedSky/Qte/arm-qtopia-2.2.0   z/tslib-1.4.1/config.log
/opt/EmbedSky/Qte/ncurses-5.6/config.log
/opt/EmbedSky/Qte/x86-qtopia-2.2.0/konqueror/config.log
/opt/EmbedSky/apps/boa-0.94.13/src/config.log
/opt/EmbedSky/apps/madplay/libid3tag-0.15.1b/config.log
/opt/EmbedSky/apps/madplay/libmad-0.15.1b/config.log
/opt/EmbedSky/apps/madplay/madplay-0.15.2b/config.log
/opt/EmbedSky/apps/sqlite-3.5.9/config.log
/opt/EmbedSky/apps/wget-1.10.2/config.log
/scim-googlepinyin/config.log
/var/log/fontconfig.log
zyx@zyx:/$

第一条便是config.log的目录。
zyx@zyx:/$ cd /opt/EmbedSky/Qte/arm-qtopia-2.2.0/konqueror/
zyx@zyx:/opt/EmbedSky/Qte/arm-qtopia-2.2.0/konqueror$ sudo gedit config.log
[sudo] password for zyx:
打开config.log后第71行~第73行:
configure:2516: checking for C compiler version
configure:2519: arm-linux-gcc --version </dev/null >&5
./configure: line 2520: arm-linux-gcc: command not found

可以发现,编译脚本并没有找到arm-linux-gcc的编译器,但是交叉编译器已经配置过了并已经生效,此时我想起了有时候编译器只有
在根用户下才可以被识别,所以切换到根用户下,再运行一次编译脚本就可以了。

解决办法:
zyx@zyx:/opt/EmbedSky/Qte$ su
Password:
root@zyx:/opt/EmbedSky/Qte# ./arm-qtopia-2.2.0-konqueror_build

Done!!! 一切OK!!!

<think>我们正在解决一个编译错误configure: error: C compiler cannot create executables。这个错误通常表示在配置阶段,C编译器无法生成可执行文件,可能是由于编译器环境、依赖库或系统配置问题引起的。根据引用[1][2][3][4][5],我们可以总结出以下解决步骤: ### 步骤1: 检查编译器是否安装 首先,确保系统已安装C编译器(如gcc或clang)。在终端中运行以下命令: ```bash gcc --version ``` 如果未安装,根据操作系统安装编译器: - Ubuntu/Debian: `sudo apt-get install build-essential` - CentOS/RHEL: `sudo yum groupinstall "Development Tools"` ### 步骤2: 检查环境变量 确保编译器路径在`PATH`环境变量中。使用`echo $PATH`查看,并确保包含`/usr/bin`等目录。如果使用自定义路径(如通过conda安装),请确保正确设置环境变量: ```bash export PATH=/path/to/compiler/bin:$PATH ``` ### 步骤3: 检查依赖库 某些编译需要依赖库(如zlib、openssl等)。根据错误日志(如引用[3][4]中提到的`config.log`),安装缺失的依赖。例如: ```bash # Ubuntu/Debian sudo apt-get install libssl-dev zlib1g-dev # CentOS/RHEL sudo yum install openssl-devel zlib-devel ``` ### 步骤4: 检查权限和磁盘空间 - 确保编译目录有写权限:`chmod -R u+w /path/to/build/dir` - 检查磁盘空间:`df -h`,确保有足够空间。 ### 步骤5: 查看config.log 错误信息会提示查看`config.log`(如引用[3][4])。打开该文件,搜索错误关键字(如`cannot create executables`),定位具体原因。 ### 步骤6: 指定编译器路径 如果系统有多个编译器,在配置时指定编译器路径: ```bash ./configure CC=/path/to/gcc CXX=/path/to/g++ ``` ### 步骤7: 更新系统工具 确保`make`、`autoconf`等工具为最新版本: ```bash # Ubuntu/Debian sudo apt-get update && sudo apt-get install make autoconf automake # CentOS/RHEL sudo yum install make autoconf automake ``` ### 示例:修复Doris编译错误(引用[4]) 在Doris编译中,错误指向`unixODBC`配置失败。解决方案: 1. 安装unixODBC开发包: ```bash sudo apt-get install unixodbc-dev # Ubuntu sudo yum install unixODBC-devel # CentOS ``` 2. 重新运行配置。 ### 特殊情况:RStudio Server中的问题(引用[5]) 在RStudio Server中,环境变量可能未正确继承。尝试: - 在RStudio Server的配置文件(如`/etc/rstudio/rserver.conf`)中设置环境变量: ``` rsession-ld-library-path=/path/to/libs rsession-path=/path/to/bin:$PATH ``` - 或在R脚本中设置: ```r Sys.setenv(PATH = "/path/to/conda/bin:/usr/bin:/bin") ``` ### 总结 解决`configure: error: C compiler cannot create executables`的关键在于逐步排查: 1. 编译器安装 2. 环境变量配置 3. 依赖库安装 4. 权限和空间 5. 日志分析 通过以上步骤,大多数此类错误可被解决[^1][^2][^3][^4][^5]。 §§相关问题§§ 1. 如何查看Linux系统中的环境变量? 2. 如何在编译时指定依赖库的路径? 3. 如何解决编译过程中出现的“undefined reference”错误? 4. 如何在Ubuntu系统中安装多个版本的GCC? 5. 如何配置RStudio Server以使用自定义环境变量?</think>### 解决 `configure: error: C compiler cannot create executables` 错误错误表示系统无法通过C编译器生成可执行文件,通常由编译器环境问题或依赖缺失引起。以下是逐步解决方案: --- #### **1. 验证C编译器是否安装** ```bash gcc --version # 检查GCC编译器 clang --version # 检查Clang编译器 ``` - **若未安装**: - Ubuntu/Debian: `sudo apt install build-essential` - CentOS/RHEL: `sudo yum groupinstall "Development Tools"` #### **2. 检查环境变量** - 查看编译器路径: ```bash echo $PATH which gcc ``` - **修复路径问题**: ```bash export PATH=/usr/bin:$PATH # 添加标准路径 ``` #### **3. 检查依赖库** - 安装关键开发库: ```bash # Ubuntu/Debian sudo apt install libc6-dev libssl-dev zlib1g-dev # CentOS/RHEL sudo yum install glibc-devel openssl-devel zlib-devel ``` #### **4. 检查磁盘空间和权限** - 确保有足够空间:`df -h` - 授予编译目录权限:`chmod -R u+w /path/to/source` #### **5. 查看日志定位问题** - 打开错误提示的 `config.log` 文件: ```bash less config.log # 搜索关键词 "error" 或 "cannot create" ``` - 常见日志线索: - 缺少头文件(如 `stdio.h`)→ 安装 `libc6-dev` - 链接器失败 → 检查库路径或安装 `binutils` #### **6. 指定编译器路径** 在 `configure` 时显式声明编译器: ```bash ./configure CC=/path/to/gcc CXX=/path/to/g++ --prefix=/your/path ``` #### **7. 特殊案例处理** - **R环境问题**(引用[5]): 确保RStudio Server继承正确的环境变量: ```bash echo "PATH=$PATH:/path/to/your/compiler/bin" >> ~/.Renviron ``` - **交叉编译问题**: 设置正确的目标平台:`./configure --host=x86_64-linux-gnu` --- ### 关键要点总结 | 问题类型 | 解决方案 | |-------------------|----------------------------| | 编译器未安装 | 安装 `build-essential` | | 路径错误 | 修正 `$PATH` 环境变量 | | 依赖库缺失 | 安装 `libc6-dev` 等开发包 | | 权限不足 | `chmod -R u+w` 编译目录 | | 环境变量未继承 | 在 `~/.Renviron` 中设置路径 | 通过逐步排查,90%的此类错误可解决[^1][^2][^3][^4][^5]。若仍失败,提供 `config.log` 内容可进一步分析
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值