私はMingwを使用していて、exeファイル-g ++ -nostdlib -o main.exe main.cpp -luser32から標準ライブラリのコードを削除してみます。はい、それは機能しますが、最初の機能は常にエントリーポイントになります。さて、必要なのは直接エントリシンボルを設定するだけです - g ++ -nostdlib -e WinMain -o main.exe main.cpp -luser32今私は "警告:エントリーシンボルWinMainを見つけることができません、デフォルトは00401000"になります。その後、最初の機能は再びエントリポイントになります。次に、nostdlibをnodefaultlibsに変更して、「未定義の「一部のオブジェクト」への参照」に関する多くのエラーメッセージを取得します。exeファイルから標準C++ライブラリを削除してください
質問:標準ライブラリコードを削除してプログラムエントリポイントを設定する方法はありますか?
PS g ++ --version - g ++(i686-posix-dwarf-rev0、MinGW-W64プロジェクトで構築)5.3.0。 main.cppに:
#include<windows.h>
//this function called instead of WinMain
int OtherFunction()
{
MessageBoxA(NULL,"OtherFunction","OtherFunction",MB_OK);
return 0;
}
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
MessageBoxA(NULL,"WinMain","WinMain",MB_OK);
return 0;
}
と
やリンクを、なぜあなたはあなたの実行ファイルから標準ライブラリを削除しようとしていますか? – Borgleader
はい、珍しいstdライブラリを削除したいです。わかりませんが、WinMainをextern "C"として宣言する必要があるかもしれません。そうでなければ、WinMain関数のリンカシンボルが "WinMain"ではないように装飾されます。または、リンカーコマンドに(コンパイラ固有の)装飾名を使用する必要があります。これが何であるかわからないなら、_C++ name decoration_を探している有名な検索エンジンを使ってください。例えば、 http://www.geeksforgeeks.org/extern-c-in-c/しかしTBH私はそれが非常に権威的なのかどうかはわかりません。しかし、正確ではないかもしれません。 HTH、バニー。 – barny
barny:すでにextern "C"と-e WinMain @ 16を試しています。それも動作しません。 Borgleader:もっと小さなexeファイル用。 nostdlibを使用している場合は、3 KBのexeファイルがあります。私がnostdlibを使わないなら、私は16kbを手に入れます。私がsingle push_back(1)を使用している場合、私は68kbを得ます。私は少し迷惑です。 – Aso