/*********************************************************************

* Author  : Samson

* Date    : 02/02/2015

* Test platform:

*              3.13.0-24-generic

*              GNU bash, 4.3.11(1)-release

* *******************************************************************/

在helloworld工程中,编写了一个简单的两个数值相加的程序,编译成为共享库后,如何使用python对其进行调用呢?

使用ll命令列出当前目录下的共享库,其中共享库名为libhelloworld.so.0.0.0

linuxidc@linuxidc:~/helloworld/.libs$ ll

总用量 32

drwxr-xr-x 2 linuxidc linuxidc 4096  1月 29 14:54 ./

drwxr-xr-x 6 linuxidc linuxidc 4096  1月 29 16:08 ../

-rw-r--r-- 1 linuxidc linuxidc 3816  1月 29 14:54 helloworld.o

-rw-r--r-- 1 linuxidc linuxidc 3956  1月 29 14:54 libhelloworld.a

lrwxrwxrwx 1 linuxidc linuxidc  19  1月 29 14:54 libhelloworld.la -> ../libhelloworld.la

-rw-r--r-- 1 linuxidc linuxidc  983  1月 29 14:54 libhelloworld.lai

lrwxrwxrwx 1 linuxidc linuxidc  22  1月 29 14:54 libhelloworld.so -> libhelloworld.so.0.0.0*

lrwxrwxrwx 1 linuxidc linuxidc  22  1月 29 14:54 libhelloworld.so.0 -> libhelloworld.so.0.0.0*

-rwxr-xr-x 1 linuxidc linuxidc 9038  1月 29 14:54 libhelloworld.so.0.0.0*

进入python的命令行模式进行C语言实现的两个数值相加的程序的调用;

linuxidc@linuxidc:~/helloworld/.libs$ python

Python 2.7.4 (default, Sep 26 2013, 03:20:56)

[GCC 4.7.3] on linux2

Type "help", "copyright", "credits" or "license" for more information.

载入ctypes类(此类即是调用C语言动态库的方法)

>>> import ctypes

打开当前目录的动态库

>>> lib=ctypes.cdll.LoadLibrary("./libhelloworld.so.0.0.0")

调用动态库中的接口

>>> lib.add(5,7)

12

两个参数的相加的函数如下:

linuxidc@linuxidc:~/helloworld$ cat helloworld.c

#include <stdio.h>

#include <stdlib.h>

int add(int a, int b)

{

int c = a + b;

return c;

}

编译动态库的命令行:

gcc -shared -fPIC -DPIC helloworld.c -o libhelloworld.so.0.0.0

一个简单的C共享库的创建及Python调用此库的方法的更多相关文章

  1. windows库的创建和使用:静态库+动态库

    windows库的创建和使用:静态库+动态库   一.静态库的创建和使用 1. 静态库创建 (1)首先创建projecttest,測试代码例如以下: 1) test.h void test_print ...

  2. Python调用C库

    Python调用C库 Python可以利用ctypes库很方便地调用C的库函数. C库例程: # file: a.c int sum(int a, int b){   int t = 0;   int ...

  3. Qt动态库静态库的创建、使用、多级库依赖、动态库改成静态库等详细说明

    本文描述的是windows系统下,通过qtcreator在pro文件中添加动态库与静态库的方法: 1.添加动态库(直接添加动态库文件.dll,非子项目) 通过qtcreator创建动态库的方法就不在此 ...

  4. day-7 一个简单的决策树归纳算法(ID3)python编程实现

    本文介绍如何利用决策树/判定树(decision tree)中决策树归纳算法(ID3)解决机器学习中的回归问题.文中介绍基于有监督的学习方式,如何利用年龄.收入.身份.收入.信用等级等特征值来判定用户 ...

  5. 一个简单的Webservice的demo(中)_前端页面调用

    首先新建项目,这里有两种调用方式,为了能方便理解,新建页面WebserviceTest如下图: 先引用写好的服务,这里用上次写好的服务.见上次写的一个简单的Webservice的demo,简单模拟服务 ...

  6. 初始化错误——从一个简单的算例看UDF各个宏的调用顺序

    感谢西安交通大学en_phert的问题和尝试 Fluent版本:Fluent 19.0 Visual Studio版本:Visual Studio 2013 在UDF的宏的调用中大家常看见下图: 这个 ...

  7. 使用Python调用动态库

    我个人在日常使用电脑时,经常需要使用Google,于是就要切换代理,基本上是一会儿切换为代理,一会儿切换成直连,老是打开internet 选项去设置,很不方便,于是我萌生了一个想法: 做一个开关,我想 ...

  8. 使用python调用zxing库生成二维码图片

    (1)     安装Jpype 用python调用jar包须要安装jpype扩展,在Ubuntu上能够直接使用apt-get安装jpype扩展 $ sudo apt-get install pytho ...

  9. python调用Opencv库和dlib库

    python是一门胶水语言,可以调用C++编译好的dll库 python调用opencv-imggui.dll文件 https://www.cnblogs.com/zhangxian/articles ...

随机推荐

  1. 04_Hive的基本命令

    1.Hive基本操作: 1.1.Hive的建表语句: CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [ ...

  2. Hadoop_30_MapReduce_多job串联

    一个稍复杂点的处理逻辑往往需要多个mapreduce程序串联处理,多job的串联可以借助mapreduce框架的JobControl实现 示例代码:  每个job装配完成才可以进行下面代码: Cont ...

  3. anaconda环境中---py2.7下安装tf1.0 + py3.5下安装tf1.5

    anaconda环境中---py2.7下安装tf1.0 + py3.5下安装tf1.5 @wp20181030 环境:ubuntu18.04, anaconda2, ubuntu系统下事先安装了pyt ...

  4. 深度排序模型概述(二)PNN/NFM/AFM

    在CTR预估中,为了解决稀疏特征的问题,学者们提出了FM模型来建模特征之间的交互关系.但是FM模型只能表达特征之间两两组合之间的关系,无法建模两个特征之间深层次的关系或者说多个特征之间的交互关系,因此 ...

  5. redis,windows设置记录

    windows下载 github地址 : https://github.com/MicrosoftArchive/redis/releases #设置内存 redis-server.exe redis ...

  6. 【高维前缀和】8.15B. 组合数

    题目分析 没有接触过高维前缀和的话会有一点抽象

  7. [译] 优化 WEBPACK 以更快地构建 REACT

    原文地址:OPTIMIZING WEBPACK FOR FASTER REACT BUILDS 原文作者:Jonathan Rowny 译文出自:掘金翻译计划 本文永久链接:https://githu ...

  8. Java8-Stream-No.01

    import java.util.ArrayList; import java.util.List; import java.util.Optional; public class Streams1 ...

  9. JavaScript变量、作用域和内存问题总结

    ㈠理解基本类型和引用类型的值  ⑴JavaScript变量可以用来保存两种类型的值:基本类型值和引用类型值. ⑵基本类型的值源自以下 5 种基本数据类型:Undefined.Null.Boolean. ...

  10. CF732D Exams 二分 贪心

    思路:二分+贪心 提交次数:10次以上 错因:刚开始以为二分(边界,$+1or-1$)写错了,调了半天,后来才发现是$ck()$写错了.开始只判了最后是否小于零,而应该中间一旦小于零就$return\ ...