有没有办法在MinGW / MSYS2中使用所需的导出符号编译Windows DLL而不用_declspec(dllexport)
注释源代码?
答案 0 :(得分:1)
您可能已经解决了该问题,已经过去了一年,但是其他人可能有此问题,所以:
是的,在MinGW中,您不必添加declspec(dllexport)
,一个很好的原因可能是您只想使用其他人的库源文件而不修改/分叉它。
这里有一个示例 lib.c
,它将被编译成DLL并使用下面的Makefile导出func
:
int func(int A) {
return A*2;
}
和 lib.h
以便在可执行文件中使用:
typedef int func_type(int A);
Makefile
,但请确保您已修复缩进:两条缩进的行需要使用制表符而不是4个空格:
all: lib.dll ex.exe
lib.dll: lib.c
gcc -o lib.dll -shared lib.c -Wall
ex.exe: ex.c
gcc -o ex.exe ex.c -Wall
请注意,-shared
是什么,它将输出转换为有效的DLL并使其导出func
。
示例 ex.c
用于测试:
#include <stdio.h>
#include <windows.h>
#include <assert.h>
#include "lib.h"
int main(void) {
void* Lib = LoadLibraryW(L"lib.dll");
assert(Lib);
func_type (*func) = (func_type*)GetProcAddress(Lib, "func");
assert(func);
printf("%i\n", func(11)); // should output 22
return 0;
}