mingw如何制作动态库附python调用

1.mingw和msvc

bash 复制代码
g++ -fpic HelloWorld.cpp -shared -o test.dll

g++ -L . -ltest .\test.cpp

注意-L后面的.挨不挨着都行,-l不需要-ltest.dll,只需要-ltest

2.dll.cpp

extern "C" {
	__declspec(dllexport) int __stdcall add(int a, int b) {
		return a + b;
	}
}

3.dll.h

extern "C" {
	__declspec(dllexport) int __stdcall add(int a, int b);
}

4.test.c:必须要**#include "./HelloWorld.h",python则不需要**

#include <stdio.h>
#include "./HelloWorld.h"

extern int add(int a, int b);

int main(){
    printf("\n[%d]\n", add(12, 5));
    return 0;
}

5.python:main.py:经常找不到库,如何解决

1)绝对路径

2)os.add_dll_directory包含库的搜索路径

3)3.8以上版本,还是找不到就需要加上winmode=0

bash 复制代码
import ctypes  
import os
  
a = ctypes.WinDLL( 'test.dll' , winmode=0).add(12, 5)
print(a)

os.add_dll_directory("D:\\code\\thirdparty\\Chess\\cpp")
a = ctypes.WinDLL("test.dll").add(12, 5)
print(a)

6.python如果是cdecl就用CDLL()函数

相关推荐
十年一梦实验室几秒前
【C++】sophus : sim_details.hpp 实现了矩阵函数 W、其导数,以及其逆 (十七)
开发语言·c++·线性代数·矩阵
最爱番茄味9 分钟前
Python实例之函数基础打卡篇
开发语言·python
唐宋元明清218818 分钟前
.NET 阻止系统睡眠/息屏
windows·电源
Oneforlove_twoforjob44 分钟前
【Java基础面试题033】Java泛型的作用是什么?
java·开发语言
engchina1 小时前
如何在 Python 中忽略烦人的警告?
开发语言·人工智能·python
向宇it1 小时前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
诚丞成1 小时前
计算世界之安生:C++继承的文水和智慧(上)
开发语言·c++
Smile灬凉城6662 小时前
反序列化为啥可以利用加号绕过php正则匹配
开发语言·php
lsx2024062 小时前
SQL MID()
开发语言
Dream_Snowar2 小时前
速通Python 第四节——函数
开发语言·python·算法