Linux中,运行一个C语言程序如何运行

哈,Linux下的gcc编译器真是C编程的好帮手。
让我详细告诉你这个过程。

上周有客户问我如何在Linux下使用gcc编译C程序?我直接告诉他,首先你要有一个.c文件,比如叫a.c。
然后就可以用gcc编译了。

第一步是编译,这就像将代码翻译成计算机可以理解的语言。
您发出命令 gcc a.c -o a.o,它将把 a.c 编译成 a.o 文件。
如果你有多个像 b.c 和 c.c 这样的源文件,你可以写: gcc a.c b.c c.c -o a.o 然后你会得到一个像 a.ob.oc.o 这样的目标文件。

第二步是绑定,即将不同的部分连接在一起。
您使用 gcc a.ob.oc.o -o a.out 命令,该命令将链接所有目标文件并生成 a.out 可执行文件。

执行很简单,只需要在终端中输入./a.out,程序就会运行。

注意事项:首先,如果文件较少,可以直接一步编译链接。
命令:gcc a.c b.c c.c -o a.out。

其次,gcc有很多选项,你可以根据自己的需要进行配置,比如优化编译、添加调试信息等。

最后,如果你的项目很大,文件很多,使用makefile来管理会方便很多。
所以你只需要一个make命令就可以自动编译和链接所有文件。

无论如何,都由你决定。
Linux 的 gcc 编译器非常容易使用。
我仍然想知道您是否有任何特殊问题或需求?

c语言可以在linux下执行吗

Linux下的C语言,使用GCC即可。
GCC是默认编译器,安装后即可使用。
这套 GNU 工具就是这样做的。

如何在Linux中编译和运行C / C ++ 程序,简单示例教懂你

老实说,在 Linux 上开发 C/C++ 感觉就像回到了 9 0 年代,使用 DOS 命令行,但使用了更现代的工具。
我第一次接触到这个过程是在大学实验室,使用的是带有绿屏的旧奔腾 III。
当时编译器的版本太老了,一次就会停半天。
现在想来,那真是一种奢侈。

我个人的习惯是先安装编译包。
在 Debian 系统上,我总是喜欢使用命令 sudo apt update && sudo apt install build-essential,它将安装 GCC、G++ 和各种标准库。
在 CentOS 上,更改为 sudo yum install gcc-c++。
安装后,使用 gcc --version 和 g++ --version 确认版本,看看是否太旧。
例如,我上次在旧服务器上看到 GCC 4 .8 这东西不完全支持C1 1 标准,根本没法用。

在编写C代码时,我特别喜欢使用纯文本编辑器。
安装VS Code或者Eclipse,或者使用系统自带的nano或者vim。
记得有一次,我在vim写代码的时候,不小心按了Esc,然后按了i,直接选择了所有代码。
我吓得手都出汗了。
我永远无法判断 C 中的注释是 // 还是 //。
每次我输入完毕后,我都必须使用 grep 进行查找,以确保我没有错过它。

装配环节是整个流程中最容易出现问题的环节。
我遇到过无数奇怪的情况:比如编译C++文件时忘记加上-std=c++1 1 ,编译器会提示你很多语法错误;或者是某个头文件没有安装,比如,暂时需要sudo apt install libstdc++6 来修复。
最烦人的是优化选项。
当我第一次尝试-O3 时,程序运行得很快,但结果都是错误的。
后来我发现浮点数的精度损失非常大。
这个事实让我记住,直到今天,我还无法使用非常高的优化级别来执行数值计算。

合并多个文件对我来说是最烦人的部分。
例如,我有一个项目,其中 main.c 调用 utils.c 中的函数。
我可以通过运行 gcc main.c utils.c -o 直接运行它。
但后来我添加了config.h头文件,编译器崩溃了,在utils.c中找不到该宏的具体定义。
后来我学会了分别编译成.o文件,使用 gcc -c main.c -c utils.c,然后链接 gcc main.o utils.o -o。
这种技术在写项目的时候还是很有用的,不过现在很多IDE都可以自动处理这种依赖关系,省去了很多麻烦。

权限问题也很常见。
Linux对于文件权限非常严格。
我更改了可执行文件的权限,然后编译运行的时候直接报错“权限被拒绝”。
解决方案是使用 chmod +x,但是你必须一次又一次提醒自己——在 Linux 中,文件权限比代码逻辑更重要。

我总是喜欢在调试时使用GDB。
在C++代码中设置断点,然后一步一步执行,可以看到变量的值。
这项工作是在 gdb ./program 命令下完成的。
我记得有一次调试一个无限循环,让我自己痛苦了两个小时。
最后,我发现某个全局变量被某个线程改变了——这是一种在单文件程序中会让人发疯的问题。

说实话,现在在Linux上编译C/C++最好玩的就是Docker容器。
你只需要在干净的环境中开发 docker run -it gcc:latest 即可,无论系统是否很旧,或者编译器是否很旧。
不过话虽如此,掌握这些底层流程还是很有用的。
至少你知道编译器在做什么,而不是像黑匣子一样只使用IDE。