linux 如何运行编译程序

供稿:hz-xin.com     日期:2025-01-16
linux系统中用gcc编译并且运行c程序

【希望对你有帮助】
建议你看看编程的一些基础知识

- 经典hello word 程序
#include
int mian()
{
printf("hello world!
");
return 0;
}

- 编译
-进入终端
-进入源文件所在的目录
$ gcc hello.c -o hello

- 运行
$ ./hello

Gcc最基本的用法是∶gcc [options] [filenames] 其中options就是编译器所需要的参数,filenames给出相关的文件名称。 -c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。 -o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。 -g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。 -O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。 -O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢.
例子:
gcc -o test test.c
结果生成可执行文件test

gcc有多达100多个参数,现介绍常用的几个。如果对其他参数也有兴趣,可以参考:man gcc
预先处理选项
-E: 只对文件进行预处理,输出结果到标准输出
-C: 告诉预处理器不要丢弃注释.配合`-E‘选项使用. -P: 告诉预处理器不要产生`#line'命令.配合`-E'选项使用.
-v: 显示正在使用的gcc的版本
常用编译选项
-c: 将源程序编译为目标代码但并不做链接的工作,不生成最终的可执行文件,只生成一个与源文件文件名相同的以.o为后缀的目标文件。
-S:将远程序编译为一个后缀为.s的汇编语言文件,不会生成可执行文件
-x:强制编译器用指定的语言编译器来编译某个源文件
gcc -x c++ test.c 表示强制用C++编译器来编译c程序
-static: 强制连接静态库,运行时不依赖动态库
-share: 编译时尽量使用动态库
-o: 指定生成的可执行文件名,如果没有该选项,如果生成可执行文件,默认文件名为a.out
编译路径选项
-i : 指定特定头文件
gcc –c -i /home/zry/test.h test.c
-I<DIR>: 依赖选项,指定头文件路径
Linux下大多数函数将头文件放在/usr/include目录下,如果需要指定其他路径,可以使用该选项
gcc –I/home/zry/include –c test.c 添加/home/zry/include到查找路径
-L<DIR> : 指定库文件搜素路径,用法同上
-l<库名>:指定特定库文件
gcc –lapp –c test.c
Linux的库文件有一个约定,即以lib开头,-lapp表示连接libapp.so库文件
目标生成选项
-shared: 生成动态库
gcc –shared libtest.so -i /home/zry/test.h test.c
生成静态库需要ar命令,后面讲解
-fPIC: 生成可用于动态库的位置独立代码。所有的内部寻址均通过全局偏移表完成。
-ansi:支持符合ANSI标准的C程序.
该选项就会关闭GNU C中某些不兼容ANSI C的特性,例如asm, inline和 typeof关键字以及诸如unix和vax这些表明当前系统类型的预定义宏。
__asm__, __extension__, __inline__和__typeof__仍然有效
使用`-ansi'选项的时候,预处理器会预定义一个__STRICT_ANSI__宏.有些头文件 关注此宏,以避免声明某些函数,或者避免定义某些宏,这些函数和宏不被ANSI标准调用;这样就不会干扰在其他地方使用这些名字的程序了.
fno-asm:此选项实现ansi选项的功能的一部分,它禁止将asm,inline和typeof用作关键字。
-fno-strict-prototype:只对g++起作用,使用这个选项,g++将对不带参数的函数,都认为是没有显式的对参数的个数和类型说明,而不是没有参数.而gcc无论是否使用这个参数,都将对没有带参数的函数,认为没有显式说明的类型
-fthis-is-varialble:就是向传统c++看齐,可以使用this当一般变量使用
-fcond-mismatch:允许条件表达式的第二和第三参数类型不匹配,表达式的值将为void类型
-funsigned-char:
-fno-signed-char:
-fsigned-char:
-fno-unsigned-char:
这四个参数是对char类型进行设置,将char类型设置unsigned char(前两个参数)或者 signed char(后两个参数)
-imacros file: 将file文件的宏,扩展到gcc/g++的输入文件,宏定义本身并不出现在输入文件中
-Dmacro: 相当于C语言中的#define macro
-Dmacro=defn: 相当于C语言中的#define macro=defn
-Umacro: 相当于C语言中的#undef macro
-undef: 取消对任何非标准宏的定义
-M: 生成文件关联的信息。包含目标文件所依赖的所有源代码
-MM: 和M一样,但是它将忽略由#include<file>造成的依赖关系。
-MD: -M相同,但是输出将导入到.d的文件里面
-MMD: 和-MM相同,但是输出将导入到.d的文件里面
警告选项
fsyntax-only:检查程序中的语法错误,但是不产生输出信息.
-w:禁止所有警告信息.
-Wno-import: 禁止所有关于#import的警告信息.
-pedantic:打开完全遵从ANSI C标准所需的全部警告诊断;拒绝接受采用了被禁止的语法扩展的程序.
-Werror:将所有警告转换为错误
Werror选项要求GCC将所有警告当作错误进行处理。
-Wall: 显示所有警告信息

在终端里运行。在linux中有一个终端,类似于windows下的cmd

lz有这个疑问,说明lz用的是带图形用户界面的linux。
如果是ubuntu,那么,在应用程序(applications)-->附件(accessories)-->终端(terminal)中输入命令。

一文了解riscv软件系列之linux内核编译运行
三、根文件系统制作 下载BusyBox源码,选择静态编译方式,修改配置以满足RISC-V环境需求。进入目录,创建常见文件夹,复制BusyBox生成的文件至指定路径。修改fstab>文件配置,调整init.d\/rcS>文件以优化系统启动。完成rootfs.img卸载后,根文件系统镜像文件rootfs.img制作完成。四、QEMU模拟器运行Linux内核 获...

Linux中源码编译安装程序包括哪些基本步骤?
第一步:创建编译脚本 进入到源码目录 执行 .\/configure --prefix=\/...\/...(--prefix=后面是想要安装到的目录)第二部:编译 执行 make 第三部:安装 执行 make install 当然上面这几部都是最基本的步骤,如果想优化编译,要在.\/configure 后面加参数,或者configure之后手动修改Makefile文件 如O2...

在Linux系统中,如何运行一个C语言程序?
2、可以看到已经生成了一个后缀为test.c的源文件。然后用vim工具打开这个文件并编写代码。在终端中输入:vim test.c或者gvim test.c打开这个文件并编写代码。3、编写完了这个代码。现在开始编译源文件。在终端中输入:gcc test.cgcc是linux自带的c语言编译器。如果是windows则要用ide工具来编译。linux...

如何编译运行Linux系统里Vim编辑器编写的程序
可以使用gcc套件。gcc -c .\/code.c -o .\/a.out #比如这样c语言 g++ -cpp .\/code.c -o .\/a.out #比如这样c++语言

如何在linux下编译\/运行C\/C++程序
gcc first.C -o first 说明:1>编译当前目录下、名字叫做first.C的c源文件;2>在当前目录下、生成名字叫first(这个名字可以自己随便写、符合linux命名规则就行)的可执行程序;关于运行:用ls -l 命令,可以看到当前目录下有一个绿色的文件、名字叫first,就是刚刚编译得到的文件;使用命令“.\/first...

linux编译c语言命令linux编译c语言
一般有两种形式:*.c和*.cpp .c是C语言的文件扩展名;.cpp是c++的文件扩展名。两者没有很大区别,就像你学习了英语,但是美国和英国的英语有小小不同一样,linux如何编译运行test.c?我的:gcc-ctest.c-oa.out编译 .\/a.out运行 cmd能运行c语言吗?能够运行,就是需要下载一个C\/C++编译器,然后...

Linux内核编译,使用qemu启动
接下来,开始编译Linux内核。在“主目录”中,确保已安装所有必要的依赖项。使用命令“make -j8”在Linux内核文件夹下运行编译命令(注意:此命令需在“linux-6.7.5”文件夹下执行,且电脑CPU为i5-13400,虚拟机分配8个核心)。对于AMD 7840hs真机,使用“make -j12”命令,编译时长约为1分钟。编译...

linux 怎么编译c的源程序的?gcc,编译命令是什么?
在Linux下面,如果要编译一个C语言源程序,我们要使用gcc编译器。先将源文件编译成目标文件:gcc - c hello.c 生成hello.o文件,再将目标文件编译成可执行文件:gcc -o hello hello.o 如:int main(int argc,char **argv){ printf("Hello Linux\\n");} ...

linux中make,makeinstall命令分别是什么,用法?
Linux中的make命令与make install命令分别用于编译程序和安装程序。make命令 make命令是Linux系统中一个非常强大的工具,用于自动化编译源代码。它通过读取一个名为Makefile的文件,来确定如何编译源代码、生成目标文件和执行其他任务。Makefile是一个包含构建项目所需信息的文本文件,其中包含编译程序的规则。...

Windows下怎样编译出可在Linux上执行的程序
Cygwin是一个类UNIX环境,可以在Windows系统上运行,它提供了大量的类Unix工具和库,包括各种编译器和解释器。用户只需访问Cygwin官网下载安装程序,按照提示进行安装,并确保安装过程中选择了需要的语言编译器和解释器。完成安装后,用户便可以在Cygwin环境中直接编译生成适用于Linux系统的可执行文件。另一种...