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()函数

相关推荐
江西理工大学小杨8 小时前
高性能 C++ 社交平台1:微服务架构设计
开发语言·c++·微服务
lihao lihao8 小时前
接口自动化测试—request模块
开发语言·python
Coisinilove8 小时前
MATLAB微分方程求解
开发语言·matlab·微分方程
鲨辣椒100868 小时前
线程函数接口补充
java·开发语言·算法
沐知全栈开发8 小时前
Java 枚举
开发语言
钦拆大仁8 小时前
Java中的泛型
java·开发语言
0 0 08 小时前
CCF-CSP 33-2 相似度计算(jaccard)【C++】考点:STL容器(set/map)
开发语言·c++·算法
Mr YiRan8 小时前
C++高级之SLT中的容器学习与函数谓词
开发语言·c++·学习
wjs20249 小时前
Bootstrap 下拉菜单:功能、应用与优化
开发语言
tod1139 小时前
C++ 核心知识点全解析(七)
开发语言·c++·面试经验