编译问题configure: error: C compiler cannot create executables

本文记录了在将tinydtls库从一个平台移植到openwrt平台时遇到的编译错误,并给出了详细的排查过程及解决方案。问题在于配置时传递的CFLAGS参数导致编译器无法创建可执行文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主机:centos

SDK:openwrt(linux内核4.4.14)

编译工具: mipsel-openwrt-linux-gnu-gcc   5.3.0

今天在移植一个tinydtls库的时候,出现了一个让人头疼的问题。从一个平台移植到openwrt平台,之前的编译没问题。

就是在进入tinydtls编译目录编译时,在check编译器时,有打印信息如下:

checking for mipsel-openwrt-linux-gnu-gcc... mipsel-openwrt-linux-gnu-gcc
checking whether the C compiler works... no
configure: error: in `/home/lee/mt7621_router/openwrt/build_dir/target-mipsel_1004kc+dsp_glibc-2.22/tinydtls/tinydtls':
configure: error: C compiler cannot create executables
See `config.log' for more details

为了获得更详细的信息查看了config.log,关键的信息如下:

configure:2684: checking whether the C compiler works
configure:2706: mipsel-openwrt-linux-gnu-gcc " -Wl,--hash-style=sysv -fPIC "   conftest.c  >&5
mipsel-openwrt-linux-gnu-gcc: error: ": No such file or directory
mipsel-openwrt-linux-gnu-gcc: error: ": No such file or directory
configure:2710: $? = 1
configure:2748: result: no
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "tinydtls"
| #define PACKAGE_TARNAME "tinydtls"
| #define PACKAGE_VERSION "0.8.2"
| #define PACKAGE_STRING "tinydtls 0.8.2"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| /* end confdefs.h.  */
|
| int
| main ()
| {
|
|   ;
|   return 0;
| }
configure:2753: error: in `/home/lee/mt7621_router/openwrt/build_dir/target-mipsel_1004kc+dsp_glibc-2.22/tinydtls/tinydtls':
configure:2755: error: C compiler cannot create executables

表面上看,是由于找不到mipsel-openwrt-linux-gnu-gcc交叉编译工具而造成的,但是排查了这个情况,因为传下来的PATH中有编译工具文件夹的路径。

找了好几篇文章看了一下,其中有一篇文章里说传到./configure中的CFLAGS,LIBS变量的问题,我试了试./configure --host=$(CROSS_COMPILE_PRIV) CFLAGS=

这样就可以顺利的生成Makefile了。然后我看了一下之前传下来的CFLAGS=" -Wl,--hash-style=sysv -fPIC ",就是因为这个导致的。


参考文章链接:

1.http://blog.youkuaiyun.com/tyyhong/article/details/4266749 

2.http://blog.sina.com.cn/s/blog_533074eb01011yfv.html


<think>嗯,用户遇到了configure错误,提示“C compiler cannot create executables”。根据他们提供的引用,日志显示在编译测试程序时出现了return类型默认为int的警告,导致失败。这可能是因为编译器版本问题或者缺少依赖库,比如mpfr。 首先,我需要回忆一下用户之前的问题。他们之前处理的是CentOS7的yum插件和内核头文件的问题,现在转向了编译器的错误。这可能意味着他们在安装某些软件时需要进行编译,而遇到了依赖项或环境配置的问题。 根据引用1中的config.log,错误发生在检查gcc是否能创建可执行文件时,测试程序main函数没有指定返回类型,导致编译器警告。虽然这是一个警告,但可能configure脚本将其视为错误,导致配置失败。这可能是因为使用了较新的gcc版本,默认不允许隐式int返回类型,而旧代码没有显式声明返回类型。 引用2提到用户安装了mpfr库,可能这个库是某个依赖项。但用户现在的问题是关于C编译器的,可能需要检查编译器本身是否安装正确,或者是否有其他依赖库缺失。 接下来,我需要考虑解决方案的步骤。首先,用户应该确保gcc和相关构建工具已经正确安装。然后检查是否有依赖库如glibc、mpfr等未安装或版本不兼容。此外,环境变量如PATH或CFLAGS可能设置不当,或者权限问题导致编译器无法生成可执行文件。 另外,用户之前处理过yum插件的问题,可能系统仓库配置有问题,导致安装的软件包不完整或版本冲突。需要检查yum仓库是否正常,确保所有依赖包正确安装。 可能的解决步骤包括:安装gcc和开发工具链,验证gcc是否正常工作,检查依赖库是否存在,修复可能的符号链接问题,清理旧的构建文件,以及处理环境变量等。如果问题依旧,可能需要手动指定编译器选项或更新相关软件包。 需要确保用户按照正确的顺序执行这些步骤,并解释每个步骤的目的,比如安装开发工具组来获取必要的编译工具,检查库文件是否存在以避免链接错误,以及处理configure脚本的参数来绕过严格检查。 同时,需要提醒用户注意权限问题,比如使用sudo执行安装命令,以及检查日志文件的具体错误信息,以便更精准地定位问题。</think>### **分步解决方案:解决configure错误"C compiler cannot create executables"** --- #### **1. 验证基础编译环境** ```bash # 安装GCC及基础开发工具链(关键步骤) sudo yum install -y gcc make glibc-devel binutils # 验证gcc版本 gcc --version # 需输出类似gcc 4.8.5的版本信息[^1] ``` #### **2. 检查依赖库完整性** ```bash # 安装MPFR库(根据引用[2]提示) sudo yum install -y mpfr-devel # 验证符号链接(关键!) ls -l /usr/lib64/libmpfr.so* # 必须存在libmpfr.so.4 -> libmpfr.so.4.1.1[^2] ``` #### **3. 修复隐式int类型警告(针对引用[1]具体错误)** ```bash # 手动指定CFLAGS绕过隐式int检测 export CFLAGS="-Wno-implicit-int" # 重新运行configure并捕获错误 ./configure --disable-werror 2>&1 | tee configure.log ``` #### **4. 处理编译器路径/权限问题** ```bash # 确认编译器路径有效 which gcc # 应输出/usr/bin/gcc # 重置编译器缓存 sudo rm -f /usr/bin/gcc /usr/bin/cc sudo ln -s /usr/bin/gcc /usr/bin/cc ``` #### **5. 完整依赖链检查** ```bash # 安装常见开发依赖库 sudo yum install -y zlib-devel openssl-devel ncurses-devel libffi-devel # 验证头文件路径 ls /usr/include/stdio.h # 必须存在 ``` --- ### **关键问题诊断表** | 症状 | 检测命令 | 修复方案 | |-------|---------|---------| | 编译器路径错误 | `which gcc` | `sudo yum reinstall gcc` | | MPFR库缺失 | `ls /usr/lib64/libmpfr.so*` | `sudo yum install mpfr-devel` | | 头文件丢失 | `find /usr/include -name stdio.h` | `sudo yum install glibc-devel` | | 隐式int警告 | `grep -rn "return type defaults" config.log` | 设置`CFLAGS="-Wno-implicit-int"` | --- ### **高级调试方法** #### **手动编译测试程序** ```c // 创建测试文件test.c #include <stdio.h> int main() { printf("Hello Compiler!\n"); return 0; } ``` ```bash # 编译测试(关键诊断步骤) gcc test.c -o test ./test # 成功应输出Hello Compiler! ``` #### **查看详细编译日志** ```bash # 显示预处理/汇编/链接全过程 gcc -v -save-temps test.c ``` --- ### **引用说明** : CentOS7默认gcc版本为4.8.5,对隐式int返回类型较宽容,若出现该错误需检查代码兼容性。 [^2]: `libmpfr.so.4`符号链接缺失会导致数值计算库依赖中断,需通过`yum reinstall mpfr`修复[^2]。 --- ### **相关问题** 1. 如何修复`configure: error: C++ compiler cannot create executables`? 2. `make: *** No rule to make target 'install'`错误该如何处理? 3. 升级CentOS7的GCC到新版后出现兼容性问题怎么办? --- 通过以上步骤,90%以上的"C compiler cannot create executables"错误可被定位和修复。若仍存在问题,请提供`config.log`中`### FAILED PROGRAM ###`段落的具体内容以便进一步分析。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值