Linux环境下如何编译和执行c程序?(详解)

本篇文章给大家带来的内容是介绍linux环境下如何编译和执行c程序?(详解) 。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

1 单个文件的编译和执行

创建main.c文件,内容如下:

#include #include int main(void){printf("Hello world!n");return 0;};

编译:

gcc -o main main.o

执行:

root@ubuntu:/ybg/python# ./mainInput an integer:10sum=55

2 多个文件的编译和执行
创建sum.c文件,内容如下:

#include #include int sum(int x){int i, result=0;for(i=0; i 100)exit(-1);return result;};

创建main.c文件,内容如下:

#include #include int main(void){int x;printf("Input an integer:n");scanf("%d", &x);printf("sum=%dn", sum(x));return 0;};

编译

gcc -c sum.c -fPIC -o sum.ogcc -c main.c -fPIC -o main.o

生成可执行文件,文件名为main

gcc -o main sum.o main.o

执行程序

./main

执行结果同上

3 使用动态链接库方式

生成动态链接库

豆包AI编程 豆包AI编程

豆包推出的AI编程助手

豆包AI编程 483 查看详情 豆包AI编程

gcc sum.o -shared -o sum.so

生成可执行文件,文件名为main

gcc -o main sum.o main.o

执行

./main

如果有以下报错,说明在默认的动态链接库路径下没有找到刚刚生成的sum.so

./main: error while loading shared libraries: sum.so: cannot open shared object file: No such file or directory

执行以下命令,将当前目录添加到动态链接库查找路径环境变量

export LD_LIBRARY_PATH=pwd:$LD_LIBRARY_PATH

再次执行

./main

执行结果同上

4 python调用.so动态链接库

创建test.py文件,内容如下:

import ctypesso = ctypes.CDLL('./sum.so')print "so.sum(50) = %d" % so.sum(50)

执行

root@ubuntu:/ybg/python# python test.py so.sum(50) = 1275

以上就是Linux环境下如何编译和执行c程序?(详解)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/341061.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月5日 18:20:25
下一篇 2025年11月5日 18:21:32

相关推荐

  • C++ 函数如何促进跨平台 GUI 开发?

    c++++ 函数在跨平台 gui 开发中发挥着至关重要的作用,提供跨平台 api 来创建和管理 gui。这些 api 包括 sfml、qt 和 glfw,提供通用函数来操作窗口、控件和事件。这些函数允许开发者在不同操作系统上构建一致的 gui 体验,简化了多平台开发,并实现了在各种平台上无缝运行的应…

    2025年12月18日
    000
  • C++ 函数性能优化中的代码剖析与分析方法

    c++++函数性能优化涉及代码剖析和分析。代码剖析工具(如gprof、valgrind、visual studio profiler)识别结构和执行中的潜在问题。代码分析工具(如vtune amplifier、callgrind、perf)量化性能特征。通过剖析和分析,可优化代码瓶颈,如优化冒泡排序…

    2025年12月18日
    000
  • 如何测量 C++ 函数单元测试的覆盖率?

    在 c++++ 中测量函数单元测试覆盖率的方法包括:使用编译器标志,如 gcc 的 -fprofile-arcs 和 -ftest-coverage 标志;使用测试框架,如 google test 的 –gtest_output=xml 标志;使用外部工具,如 covwrap。 如何测量…

    2025年12月18日
    000
  • C++ 函数内存分配和销毁在不同操作系统上的特性

    c++++ 函数内存分配和销毁在不同系统上的特性内存分配:windows: 使用 msvcrt.dll 库的堆分配器linux: 使用 glibc 的堆分配器macos: 使用系统库的分配器内存销毁:windows: 使用堆分配器释放 new 分配的内存linux: 使用 glibc 的堆分配器释放…

    2025年12月18日
    000
  • 分析 C++ 函数性能的常用工具有哪些?

    c++++ 函数性能分析工具汇总:gprof:分析函数调用图、运行时间和调用频率。valgrind:检测内存错误和性能问题,分析函数调用、内存分配和缓存命中率。perf:收集和分析性能数据,提供有关 cpu 利用率、内存使用和函数调用的详细见解。debugger:逐行执行函数,检查变量值和性能指标,…

    2025年12月18日
    000
  • C++ 中的函数指针是否可移植以及在不同平台上的行为有何差异?

    摘要:可移植性:函数指针在 windows、linux 和 macos 上可移植。数据类型大小:数据类型大小在不同平台上可能不同,因此需检查兼容性。调用约定:不同平台使用不同的调用约定,可能导致函数指针不兼容。实战示例:函数指针用法示例演示了在不同平台上的可移植性。注意事项:在跨平台共享代码时,需要…

    2025年12月18日
    000
  • C++ 中函数调用约定有哪些?

    c++++ 中的调用约定定义了函数参数传递和返回值的方式,包括 cdecl、fastcall、thiscall 和 stdcall。实战中,stdcall 调用约定可用于加载和调用 dll 中的函数。 C++ 函数调用约定 在 C++ 中,调用约定定义了函数的参数传递和返回的方式。不同的调用约定在性…

    2025年12月18日
    000
  • C程序将一个文件的内容复制到另一个文件中

    C文件I/O − 创建、打开、读取、写入和关闭文件 C文件管理 文件可用于存储大量持久数据。像许多其他语言一样,’C’提供以下文件管理函数: 创建文件打开文件读取文件向文件写入关闭文件 以下是’C’中最重要的文件管理函数: 函数 目的 fopen ()…

    2025年12月17日
    000
  • C程序按字母顺序排序姓名

    用户必须输入姓名的数量,并且这些姓名需要使用strcpy()函数按字母顺序排序。 字符数组(或字符集合)被称为字符串。 声明 以下是数组的声明: char stringname [size]; 例如,char string[50]; 长度为50个字符的字符串。 初始化 使用单个字符常量 char s…

    2025年12月17日
    000
  • 循环调度的C程序

    we are given with the n processes with their corresponding burst time and time quantum and the task is to find the average waiting time and average tu…

    2025年12月17日
    000
  • 使用冒泡排序算法对给定的数字列表进行升序排序的C程序

    在 C 编程语言中,冒泡排序是最简单的排序技术,也称为交换排序。 冒泡排序过程 将第一个元素与列表中的其余元素进行比较,如果它们不按顺序进行交换(交换)。 对列表中的其他元素重复相同的操作列表,直到所有元素都已排序。 算法 下面给出的是一种算法,通过使用冒泡排序技术 – 第 1 步 &#…

    2025年12月17日
    000
  • C程序打印带有当前时间的数字时钟

    在本节中,我们将了解如何使用 C 语言制作数字时钟。要处理时间,我们可以使用 time.h 头文件。该头文件有一些函数签名,用于处理日期和时间相关问题。 time.h 的四个重要组成部分如下 size_t 这个 size_t 基本上是无符号整数类型。这是sizeof()的结果。 clock_t用于存…

    2025年12月17日
    000
  • C程序使用rename()函数更改文件名

    rename函数将文件或目录从旧名称更改为新名称。此操作类似于移动操作。因此,我们也可以使用此rename函数来移动文件。 此函数存在于stdio.h库头文件中。 rename函数的语法如下: int rename(const char * oldname, const char * newname…

    2025年12月17日
    000
  • C程序示例,演示fork()和pipe()函数

    在本题中,我们将演示fork()和pipe()。在这里,我们将为 Linux 创建一个 C 程序,该程序将连接两个字符串,使用 2 个进程,其中一个进程将获取输入并将其发送给其他进程,其他进程将字符串与预定义的字符串连接起来并返回连接后的字符串。 第一让回顾一下fork()和pipe() fork(…

    2025年12月17日
    000
  • 不会在按下Ctrl+Z时暂停的C程序

    在编程中,当程序出现故障并在终端编译器中以异常方式运行时,程序员有权利显式停止程序的运行。要显式停止程序,用户必须知道需要按下的正确键盘快捷键。 为了终止代码块的执行,有两种类型的键盘快捷键被使用。 Ctrl+c – 用于停止程序的执行,它需要一些时间来完成输入/输出操作,然后暂停执行。…

    2025年12月17日
    000
  • C程序检查日期是否有效

    给定的日期格式为日期、月份和年份(整数)。任务是确定该日期是否可行。 有效日期范围应为 1/1/1800 – 31/12/9999,超出这些日期的日期无效。 这些日期不仅包含年份范围,还包含与日历日期相关的所有约束。 约束是 – 日期不能是小于 1 且大于 31月份不能小于 1 且大于 …

    2025年12月17日
    000
  • 递归插入排序的C程序

    插入排序是一种排序算法,它是一种基于就地比较的算法。 该算法的工作原理是将元素放置在已排序子数组中的位置,即元素之前的子数组是排序子数组。 算法 Step1 – 从 1 到 n-1 循环并执行 – Step2 .1 – 选择位置 i 处的元素,array[i]。 …

    2025年12月17日
    000
  • 六边形图案的C程序

    我们被给定一个整数’n’,任务是生成六边形图案并显示最终输出。 示例 Input-: n=5Output-: Input-: n = 4Output-: Approach we are using in the given program is as follows − In…

    2025年12月17日
    000
  • 一个使用C程序的谜题

    这里我们将看到一道 C 谜题。假设我们有两个数字 48 和 96。我们必须将第一个数字添加到第二个数字之后。所以最终的结果将是9648。但是我们不能使用任何逻辑、算术、字符串相关的操作,也不能使用任何预定义的函数。那么我们怎样才能做到这一点呢? 这很简单。我们可以通过在 C 中使用 Token Pa…

    2025年12月17日
    000
  • C程序实现欧几里得算法

    问题 实现欧几里得算法来查找两个整数的最大公约数 (GCD) 和最小公倍数 (LCM),并将结果与​​给定整数一起输出。 解决方案 实现欧几里得算法求两个整数的最大公约数 (GCD) 和最小公倍数 (LCM) 的解决方案如下 – 求 GCD 和 LCM 的逻辑如下 – if(…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信