MinGW64 build DLLs

邢星波
2023-12-01

该记录仅作为学习参考,记录学习过程中遇到的问题,以及解决办法。

MinGW的安装和编译出DLL:

step1 建立DLL项目,结构如下:
test/
----mydll.h
----mydll.c

	头文件mydll.h
	#ifndef _MY_DLL_H
	#define _MY_DLL_H_
	#ifdef __cplusplus
	extern "C" {
	#endif
	extern __declspec (dllexport) int add_range (int, int);
	extern __declspec (dllexport) double average (int*, int);
	#ifdef __cplusplus
	}
	#endif
	#endif // ~_MY_DLL_H_

	C文件:mydll.c
	#include "mydll.h"
	// __declspec (dllexport)
	int add_range (int _sta, int _end) {
		int res = 0;
		if (_sta > _end)
			return 0x7fffffff;
		for (; _sta != _end; _sta ++) {
			res += _sta;
		}
		return res;
	}
	// __declspec (dllexport)
	double average (int* _arr, int _cnt) {
		double res = 0.0;
		int i = 0;
		if (_cnt <= 0)
			return (double) (~0);
		for (; i < _cnt; i ++)
			res += _arr [i];
		return (double) (res /= _cnt);
	}

step2 编译,链接
#打开命令行,进入我们的项目路径中:
d:\test>
#执行编译命令
d:\test>mingw32-gcc -c -DBUILD_DLL mydll.c
#执行链接命令,生成mydll.dll和静态库文件libmydll.a
d:\test>mingw32-gcc -shared -o mydll.dll mydll.o -Wl,–kill-at,–out-implib,libmydll.a

MinGW64的安装与编译出DLL

下载与安装https://www.cnblogs.com/ggg-327931457/p/9694516.html
*注意

  • 1.下载器下载很有可能无法在线下载,可以在上述链接中最后找到解决办法:下载正确离线包。

  • 2.下载时默认源可能没法用,注意换源(就在下载页面的problems链接里),我试的University of Kent的源还不错。

编译生成动态链接库DLL
还是用32位mingw使用的代码,但是注意编译命令不同:

  • x86_64-w64-mingw32-gcc -c -DBUILD_DLL mydll.c
  • x86_64-w64-mingw32-gcc -shared -o mydll.dll mydll.o -Wl,–kill-at,–out-implib,libmydll.a
  • x86_64-w64-mingw32-gcc -m64 test.c mydll.dll(或者用python,见test.py
	test.c
	int main (int argc, char* argv []) {
		int res = add_range (10, 200);
		printf ("%d\n", res);
	    int a[5] = {1,2,3,4,5};
	    /* double res1 = average(a, 3); */
		/* printf ("%g\n", res1); */
		printf("%g\n", average(a, 5));
		return 0;
	}

	test.py
	import ctypes
	mydll = ctypes.windll.LoadLibrary("mydll.dll")
	print(mydll.add_range(10,200))
 类似资料:

相关阅读

相关文章

相关问答