1 单个文件的编译和执行
创建main.c文件,内容如下:

#include <stdio.h>
#include <stdlib.h> int main(void){
printf("Hello world!\n");
return ;
};

编译:

gcc -o main main.o

执行:

root@ubuntu:/ybg/python# ./main
Input an integer: sum=

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

#include <stdio.h>
#include <stdlib.h> int sum(int x){
int i, result=;
for(i=; i<=x; i++){
result+=i;
}
if(x > )
exit(-);
return result;
};

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

#include <stdio.h>
#include <stdlib.h> int main(void){
int x;
printf("Input an integer:\n");
scanf("%d", &x);
printf("sum=%d\n", sum(x));
return ;
};

编译

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

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

gcc -o main sum.o main.o

执行程序

./main

执行结果同上

3 使用动态链接库方式
生成动态链接库

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 ctypes
so = ctypes.CDLL('./sum.so') print "so.sum(50) = %d" % so.sum(50)

执行

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

Linux环境下c程序的编译和执行的更多相关文章

  1. Linux 环境下 C++ 的开发编译

    Linux环境下C++程序的开发编译学习笔记 环境:vmware 运行下的Ubuntu 16.04 姓名:谢津 时间:2018/5/24 内容:1)vim的安装及配置:2)第一个C++程序的编写与编译 ...

  2. Qt在Linux环境下应用程序字体模糊的解决方法(先改成使用默认字体,然后使用qtconfig配置)

    这两天一直在用Qt实现一个跨平台的软件.软件之前在Windows上编写的,后来放到里Ubuntu 10.10下编译.程序运行时遇到一个很棘手的问题,界面文本非常模糊.后来在网上查阅了好几天的资料,经历 ...

  3. Linux环境下使用Android NDK编译c/c++生成可执行文件

    1.安装Android NDK至Linux(Lubuntu 16) 从网上下载 android-ndk-r13b-linux-x86_64.zip,本人将其解压至/home/guanglun/work ...

  4. Linux环境下levelDB源码编译与安装

    1.下载源码并编译 git clone https://github.com/google/leveldb.git cd leveldb //编译源码的时候需要安装cmake,并且版本需要大于3.9, ...

  5. 【caffe】caffe在linux环境下的安装与编译

    网上的caffe的安装教程繁杂而散乱,对初学者很不友好,尤其对该框架理解不深的童鞋.总的来说,caffe的安装不外乎几个固定的步骤,对每一步有了一定的理解,安装只是time-consuming的问题! ...

  6. cocos2d-x v3.0各个环境下创建项目以及编译、执行官方DEMO

    摘自:https://github.com/cocos2d/cocos2d-x/ 怎样创建一个新项目 How to start a new game Download the code from co ...

  7. linux环境下java读取sh脚本并执行

    Process process;           String cmd = "/home/ty/t.sh";//这里必须要给文件赋权限 chmod u+x fileName; ...

  8. linux环境下(非UI操作)所有软件的安装与卸载总结

    UI界面的软件管理 linux下的软件一般都是经过压缩的,主要的格式有这几种:rpm.tar.tar.gz.tgz等.所以首先拿到软件后第一件事就是解压缩. 在xwindow下以rpm格式的软件安装比 ...

  9. Linux环境下安装Redis

    记录一下Linux环境下安装Redis,按顺序执行即可,这里下载的是Redis5,大家可根据自己的需求,修改版本号就好了,亲测可行. 1.下载Redis安装包cd /usr/local/wget ht ...

随机推荐

  1. hdu4604 Deque(最长上升子序列变形)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4604 题意:一个含有n个数栈,每次取出一个数,可以把这个数放在deque(双向队列)首部,放在尾部,或 ...

  2. Ruby Time类和Date类

    Time类 更新: 2017/06/23 更新了Data/Time在model模式下的便利方法 更新: 2018/10/12 修改了%Y相关描述防止误解  年月日时分秒,时区    生成  获取当前时 ...

  3. Ubuntu18安装sublime 3

    转自 https://blog.csdn.net/qq_41590417/article/details/80461075 wget -qO - https://download.sublimetex ...

  4. 不重启IIS修改dotnet framework版本

    因为公司现在存在.net站点和asp站点共同运行的情况,所以需要对IIS进行一些修改,运行环境Win2003+IIS6 一.起因 原来的老站是asp开发的,用的是.net 2.0运行环境; 新站是.n ...

  5. String的用法——判断功能

    package cn.itcast_03; /* String的判断功能: 1.boolean equals(Object obj):字符串的内容是否相同,区分大小写 2.boolean equals ...

  6. Unity中,保存在OnInspectorGUI中改变的值

    using UnityEngine; using System.Collections; using UnityEditor; [CustomEditor( typeof( MessageLog ) ...

  7. MVC学习(一)

    http://www.cnblogs.com/QLeelulu/archive/2008/09/30/1302462.html

  8. 3D旋转矩阵的推导过程

    3D旋转矩阵的推导过程 包含平移的线性变换称作仿射变换,3D中的仿射变换不能用 3 x 3 矩阵表达,必须使用4 x 4矩阵. 一般来说,变换物体相当于以相反的量变换描述这个物体的坐标系.当有多个变换 ...

  9. vue 写一个聊天工具

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. col - 过滤掉输入中的反向换行符

    SYNOPSIS(总览) col [-bfx ] [ Fl l Ar num ] DESCRIPTION(描述) Col 过滤掉反向(以及半反向)换行符(LF: line feed or NL: ne ...