在 .h 文件中使用 __declspec(dllexport) 而不是在 .c 文件中定义的函数丢弃 __declspec(dllexport)

Function defined with __declspec(dllexport) in .h file but not in .c file discards __declspec(dllexport)

我注意到有几个项目无法使用 MinGW-w64 在 Windows 上构建共享库,因为它们在头文件中定义了带有 __declspec(dllexport) 的函数,但后面的实现不会重复__declspec(dllexport),导致 MinGW GCC 丢弃第一个 __declspec(dllexport)

我收到的消息是

'functionname' redeclared without dllimport attribute: previous dllimport ignored [-Werror=attributes]

我如何告诉 MinGW GCC 在第二次丢失时保留 __declspec(dllexport)

消息redeclared without dllimport attribute实际上表明头文件用__declspec(dllimport)而不是__declspec(dllexport)定义了函数。

解决方案是使用正确的定义(使用 -D 编译器标志),因此函数定义为 __declspec(dllimport)

一个具体的例子是 djvulibre-3.5.27,我必须在 运行 make 之前用 make -Clibdjvu CFLAGS="-DDJVUAPI_EXPORT -DDDJVUAPI_EXPORT -DMINILISPAPI_EXPORT" CXXFLAGS="-DDJVUAPI_EXPORT -DDDJVUAPI_EXPORT -DMINILISPAPI_EXPORT" 构建包的其余部分。