Ubuntu下运行使用string.h的C程序及编译运行问题求助
解决你的C程序编译与运行问题
兄弟,我来帮你一步步拆解这个问题,搞清楚到底哪里出问题了:
先澄清一个关键误区:gcc filename.c -E并没有帮你完成编译
你说用gcc filename.c -E后“编译成功”,其实这个命令只做了预处理步骤——它会把代码里的头文件展开、处理宏定义,然后把预处理后的内容输出到终端(如果没加-o参数的话),根本不会生成可执行文件。你觉得“成功”只是因为预处理阶段没报错,但离生成能运行的程序还差好几个步骤呢!
第一步:先解决最初的编译失败问题
你一开始直接编译失败,这才是核心问题。先别用-E,直接运行:
gcc filename.c
仔细看终端输出的错误信息——这通常是解决问题的关键。比如常见的情况:
- 拼写错误:比如把
#include <string.h>写成了#include <sting.h> - 函数使用错误:比如调用
strcpy时参数类型不匹配,或者忘了写main函数(程序入口) - 特殊场景:如果用到了某些非标准的字符串函数,可能需要额外链接库(不过
string.h里的标准函数默认是链接的)
把错误信息搞清楚,才能针对性解决。
第二步:正确生成可执行文件
当预处理没问题、原始编译错误解决后,用以下命令生成可执行文件:
- 生成默认的
a.out:
然后运行:gcc filename.c./a.out - 生成指定名称的可执行文件(比如和源文件同名):
然后运行:gcc filename.c -o filename./filename
第三步:解决运行时的常见问题
如果编译成功了但还是运行不了,大概率是这两个原因:
- 权限不足:终端提示
Permission denied,给文件加执行权限就行:chmod +x a.out # 或者对应你的可执行文件名 chmod +x filename - 没加
./前缀:直接打filename或a.out提示“command not found”?这是因为当前目录不在系统的PATH环境变量里,必须用./指定“当前目录下的这个程序”,也就是./filename或./a.out。
先按这个流程走,先搞定最初的编译错误,再生成正确的可执行文件,应该就能正常运行了!
内容的提问来源于stack exchange,提问作者user9143071
相关产品推荐
相关产品推荐

