MinGW-w64安装

我的需求是打包一个dll给python调用,遇到的各种问题,

vs2015生成的dll给python调用失败,所以我打算用mingw,这样打包后python调用的时候提示,不是有效的win32程序,百度说是因为mingw不支持打包64位,所有我下载64位


1. mingw 官网  http://mingw-w64.org/doku.php/download


2. 点击箭头打开的是一个类似github的托管网站https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/

为什么选择这个文件,看这篇博客 https://blog.csdn.net/iningwei/article/details/101649090

如果fq不过去,下载这个 https://download.csdn.net/download/u010054790/12670970

下载后找个目录解压就算安装了,然后把里面的bin目录添加的path环境变量,新打开一个cmd 输入gcc -v,有东西代表安装成功。


3. 打包准备共工作

我要创建一个dll,这个dll里有个add_int函数进行两个int类型相加返回和打印,就这么一个简单功能

要创建菜单dll目录,我是Intellij clion创建的一个c项目,三个文件main.c hello.h hello.c 其中两个hello是要生成dll用的,main.c用于测试dll,打包后的dll文件名我设置为hello.dll

hello.h



#ifndef CCPP_HELLO_H
#define CCPP_HELLO_H
extern "C"  int add_int(int a, int b);
#endif

hello.c


#include <stdio.h>
int add_int(int a, int b) {
	printf("hello.dll executing... result:%d\n", a + b);
	return a + b;
}

int fuck() {
	return 100;
}

main.c

#include <stdio.h>
#include <windows.h>

typedef int (*Fun)(int, int);     //这里声明一个函数指针,typedef 关键字是必须的,好像要显示调用dll中的函数,都需要这样用函数指针给出声明

int main() {
//    HINSTANCE hDll;
//    HMODULE hDll;
    Fun Add;
//    hDll = LoadLibrary("hello.dll");
    HMODULE hDll = LoadLibrary("hello.dll");


    if (hDll == NULL) {
        printf("nullll\n");
        exit(99);
    }
    Add = (Fun) GetProcAddress(hDll, "add_int");
    printf("Add:%d", Add(23, 45));

//    printf("Hello, World!\n");
//    printf("RRRRR:%d", add_int(23,45));
    return 0;
}

main.c不要管里面的注释,我自己调试用的,dll文件

4. 开始打包,

安装完mingw后,cmd进入项目目录

gcc --shared hello.c -o hello.dll

这样会在目录生成一个hello.dll   这个时候输入gcc main.c 会生成一个a.exe ,直接执行a.exe会输出

hello.dll executing... result:68
Add:68

这代表dll创建成功,

5。引入到python项目里

Python项目目录是D:\\deeplearning.ai\\tensorflow-01\\ccode

把hello.dll也放入这个ccode目录里,cmd 里执行python test.py就完了

test.py 文件如下

from ctypes import *

dll = cdll.LoadLibrary('D:\\deeplearning.ai\\tensorflow-01\\ccode\\hello.dll')
# dll = CDLL("hello.dll")
# dll = cdll.LoadLibrary("hello.dll")
print(dll)
try:
    a=dll.add_int(177, 158)
except Exception as err:
    print(err)

print(type(a))
print(a)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值