私は次の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 を解決しています
なんで?解決に関する警告が表示されるのはなぜですか? また、どうすればそれを取り除くことができますか? 大量のエクスポートの場合、大量の警告が表示されます..
小さな例:
Main.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;
}
Test.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
どちらも機能しません。