C语言动态库建立方法,以及和python混合编程

这篇小结是2016年暑假在新疆出差阶段所写,因为项目需要所以研究了一下。

如有错误,欢迎互相交流。

 

不同编译器实现python调用C语言动态库方法小结

  • Windows平台下Visual Studio 2010编译器创建动态库,并调用

第一步:创建动态dll动态库

1打开visual studio,新建一个项目,选择Visual  C++创建一个Win32 控制台应用程序,命名为test5。

2点击确定,弹出应用程序设计向导,击下一步,选择DLL,空项目,再点击完成。

3用右键点击项目test5里面的源文件,添加新建项,选择【C++文件(.cpp)】,命名为test5.c。注意:名称后面一定要加C语言文件后缀名.c。亦可用*.cpp。

4在test5.c中编写将被Python调用的函数(将一个数组按从下到大排序):

#include <stdio.h>

__declspec(dllexport)             

void sort(int a[10])

{

    int i,j,k,t;                        

    printf("go \n");

    for(i=0;i<10;i++)

    {

        k=i;

        for(j=i+1;j<10;j++)

        {

            if (a[j]<a[k])

                k=j;

            t=a[k];

            a[k]=a[i];

            a[i]=t;

        }}

    printf("end \n");

}

///

注意:在visual studio 里面最好把所有的变量定义和说明放在函数开头,否则便会出现:【error C2143: 语法错误 : 缺少“;”(在“类型”的前面)】这类报错。这是因为纯C语言标准规定要求局部变量定义必须在函数或局部空间的开头,然后才能有其它语句。

同样的在编辑器codeblocks里面就可以不用管这些标准规定,可以很顺利地生成动态库文件。

5点击生成菜单下的生成解决方案(快捷键F7)。如果出现【error LNK1123:转换到COFF期间失败:文件无效或损坏】的报错,请将菜单栏中的【项目】→【属性】→【配置属性】→【清单工具】→【输入和输出】→【嵌入清单】:原来是“是”,改成“否”。

6在项目test5文件夹下的“Debug”目录下会生成test5.dll动态库文件。同时可以通过命令行方式运行下面命令:

gcc -Wall -shared test5.c -o test5.dll

也可以生成test5.dll动态库文件。

7如果想要生成release版的dll动态库文件,请选择菜单栏目【生成】→【配置管理器】,将项目test5的配置方式由“Debug”改为“Release”。最后点击【重新生成解决方案】,就可以在test5文件下的“Release”目录下找到relese版的dll动态库文件了。

 

第二步 Python 2.7调用test5.dll动态库

1将test5.dll文件拷贝到python环境变量所包含的目录里面。

2在python里面引用test.dll时,用ctypes模块里面的cdll子模块,而不是通常介绍的windll模块,具体原因暂时还不清楚。

 

 

  • Gcc编译器创建动态库.so

注意windows下需要先下载MinGW安装 包(包含gcc v4.7.1编译器),然后在环境变量PATH中加入gcc编译器的执行文件的路径。但是因为我的电脑里面装有codeblocks编辑器,里面自带了MinGW,所以直接下载codeblock也行。

1先编写C语言文件;

2打开cmd管理员窗口,进入源程序C文件的指定文件夹目录下面,运行下面命令:

gcc -o test.so -shared -fPIC test.c

此时生成test.so文件,同样将该文件拷贝到python环境变量所包含的目录里面;

3.so动态库的调用和上面介绍的.dll的调用方法一样,都是导入ctypes模块中的cdll子模块。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值