博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python load C library
阅读量:5014 次
发布时间:2019-06-12

本文共 2368 字,大约阅读时间需要 7 分钟。

1. create a dynamic link library:

        gcc -shared -fPIC -o share_lib.so share_lib.c
2. the use of a .so:
      gcc main.c ./share_lib.so -o main

 

main.c:

#include 
int main(int argc, char *argv[]){ int array[5] = {
5, 4, 3, 2, 1}; int item; int pos; insert_sort(array, 5); printf("please input a number\n"); scanf("%d", &item); pos = binary_search(array, item, 5); if(pos == -1){ printf("cant't find\n"); }else{ printf("the position is %d\n", pos+1); } return 0;}

 

share_lib.c:

// insert sort functionvoid insert_sort(int *array, int length){    int i, j;    for(i = 0; i < length; ++i){        int temp;        j = i;        temp = array[i];        while(j > 0){            if(temp < array[j - 1]){                array[j] = array[j - 1];                --j;            }else{                break;            }        }        array[j] = temp;    }}// binary searchint binary_search(int *array, int item, int length){    int high, low, mid;    high = length - 1;    low = 0;    mid = (high + low) / 2;    while(low < high){        if(array[mid] > item){            high = mid;            mid = (high + low) / 2;        }else if(array[mid] < item){            low = mid;            if( (high + low) % 2 == 0)                mid = (high + low) / 2;            else                mid = (high + low)/2 + 1;        }else            return mid;    }    return -1;}void bubble_sort(int *array, int length){    int i, j;    int exchange = 1;    i = 0;    int temp;    while(i < length && exchange){        j = length - 1;        exchange = 0;        while( j > i){            if(array[j] < array[j - 1]){                temp = array[j];                array[j] = array[j - 1];                array[j - 1] = temp;                exchange = 1;            }            --j;        }        i++;    }}

 

python call *.so:

#! /usr/bin/python    from ctypes import *    import os    libtest = cdll.LoadLibrary(os.getcwd() + '/share_lib.so')    TenIntArrayType = c_int * 10;    arr = TenIntArrayType(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)    #for i in xrange(10):    #    arr[i] = 10 - i    libtest.insert_sort(pointer(arr), 10)    print libtest.binary_search(pointer(arr), 3, 10)

 

 

 pack multiple .c files to one .so:

      gcc -Wall -fPIC -c *.o
      gcc -shared -o so_name *.o

转载于:https://www.cnblogs.com/albertofwb/articles/4606210.html

你可能感兴趣的文章
jmeter,CSV数据加载、数据库连接、正则
查看>>
(独孤九剑)--正则表达式
查看>>
MySQL学习点滴 --分区表
查看>>
4.6.1 测试基础
查看>>
洛谷 P2486 [SDOI2011]染色
查看>>
oo第三单元总结
查看>>
leetcode : Count and Say [基本功]
查看>>
洛谷 P2485 [SDOI2011]计算器 解题报告
查看>>
c#访问存储过程
查看>>
Slickflow.NET 开源工作流引擎基础介绍(三) -- 基于HTML5/Bootstrap的Web流程设计器
查看>>
Node教程
查看>>
java将字段映射成另一个字段,关于 接口传参 字段不对应转换
查看>>
Redis
查看>>
字段和属性的区别
查看>>
HTTP(一)工作机制
查看>>
条形码扫描枪数据读取的问题
查看>>
$this->autoRender = false
查看>>
健壮的 Java 基准测试
查看>>
phpstorm查看类的继承关系
查看>>
git create clone(仓库)
查看>>