在 .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"
构建包的其余部分。
我注意到有几个项目无法使用 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"
构建包的其余部分。