我正在使用以下内容构建 DLL:
extern "C" __declspec(dllexport) void __stdcall DrawMouse(int X, int Y, int R, int G, int B)
{
Buffer.SetMouse(X, Y, R, G, B);
}
然后在 .def 文件中我添加了:
LIBRARY Test
;DESCRIPTION "Test Definition File"
EXPORTS
DrawMouse;
然后当我编译时,我添加链接器选项:
-static
-static-libstdc++
-static-libgcc
-Wl,--kill-at -d --input-def src\Test.def
-m32
输出是:
警告:通过链接到 _DrawMouse@24 解决 _DrawMouse
为什么?为什么它会警告我解决问题以及如何摆脱它?对于大量出口,我收到大量警告..
小例子:
主要.cpp:
#include <windows.h>
class Input
{
public:
void SetMouse(int X, int Y, int R, int G, int B)
{
/**Dummy Example**/
}
};
Input Buffer;
extern "C" void __stdcall SetMouse2(int X, int Y, int R, int G, int B)
{
/**Dummy Non-Class Example**/
}
extern "C" __declspec(dllexport) void __stdcall DrawMouse(int X, int Y, int R, int G, int B)
{
Buffer.SetMouse(X, Y, R, G, B);
}
extern "C" __declspec(dllexport) void __stdcall DrawMouse2(int X, int Y, int R, int G, int B)
{
SetMouse2(X, Y, R, G, B);
}
extern "C" __declspec(dllexport) bool __stdcall DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
DrawMouse(100, 100, 1, 1, 1);
DrawMouse2(100, 100, 1, 1, 1);
break;
case DLL_PROCESS_DETACH:
break;
}
return true;
}
测试.def:
LIBRARY Test
;DESCRIPTION "Test Definition File"
EXPORTS
DrawMouse;
DrawMouse2;
编译器日志:
-------------- Clean: Release in Test (compiler: GNU GCC Compiler)---------------
Cleaned "Test - Release"
-------------- Build: Release in Test (compiler: GNU GCC Compiler)---------------
x86_64-w64-mingw32-g++.exe -O2 -Wall -m32 -DBUILD_DLL -std=c++11 -c C:\Users\Brandon\Desktop\Test\main.cpp -o obj\Release\main.o
x86_64-w64-mingw32-g++.exe -shared -Wl,--output-def=bin\Release\libTest.def -Wl,--out-implib=bin\Release\libTest.a -Wl,--dll obj\Release\main.o -o bin\Release\Test.dll -s -static -static-libstdc++ -static-libgcc -Wl,--kill-at -d --input-def Test.def -m32 -luser32
Warning: resolving _DrawMouse by linking to _DrawMouse@20
Warning: resolving _DrawMouse2 by linking to _DrawMouse2@20
Use --enable-stdcall-fixup to disable these warnings
Use --disable-stdcall-fixup to disable these fixups
Output size is 32.50 KB
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 2 warnings (0 minutes, 0 seconds)
注意:--disable-stdcall-fixup 不起作用。这就是为什么我要问如何解决这个问题并摆脱这些警告以及导致它们的原因。
编辑:
根据要求进行修复的命令行:
x86_64-w64-mingw32-g++.exe -O2 -Wall -m32 -DBUILD_DLL -std=c++11 -c C:\Users\Brandon\Desktop\Test\main.cpp -o obj\Release\main.o
x86_64-w64-mingw32-g++.exe -shared -Wl,--output-def=bin\Release\libTest.def -Wl,--out-implib=bin\Release\libTest.a -Wl,--dll obj\Release\main.o -o bin\Release\Test.dll -s -static -static-libstdc++ -static-libgcc -Wl,--kill-at -d --input-def Test.def -m32 --disable-stdcall-fixup -luser32
也试过:
x86_64-w64-mingw32-g++.exe -O2 -Wall -m32 -DBUILD_DLL -std=c++11 -c C:\Users\Brandon\Desktop\Test\main.cpp -o obj\Release\main.o
x86_64-w64-mingw32-g++.exe -shared -Wl,--output-def=bin\Release\libTest.def -Wl,--out-implib=bin\Release\libTest.a -Wl,--dll obj\Release\main.o -o bin\Release\Test.dll -s -static -static-libstdc++ -static-libgcc -Wl,--kill-at -d --input-def Test.def -m32 --enable-stdcall-fixup -luser32
两者都不起作用。