2017-07-29 7 views
0

私はcygwinでmingw 64ビットを使用しています。MinGW、静的にリンクするのを避けるにはlibstdC++

は私が

x86_64-w64-mingw32-g++.exe -std=c++11 hello.cpp 

を使用してコンパイルする場合は、ライブラリパスがのlibstdC++と他のライブラリがPATH環境変数に指定されていない限り、出力.EXEが実行されないことを知っています。

代替は私が簡単に別のマシンにコピーすることができ、単一の.exeをしたいので、第二の溶液は、私のために優れている静的

x86_64-w64-mingw32-g++.exe -std=c++11 hello.cpp -static-libgcc -Wl,-Bstatic -lstdc++ -lpthread 

リンクすることです。私の唯一の問題は、静的にリンクするので、単純なhelloworldプログラムであっても、実行可能ファイルのサイズが10Mb以上になることです。だから私の質問です:実際には、プログラムによって実際に使用されているライブラリの部分だけを静的にリンクすることは可能ですか?

答えて

0

Windows上のbinutilsリンカldは--gc-sections引数を適切にサポートしていません。これはコンパイラフラグ-ffunction-sectionsおよび-fdata-sectionsと組み合わせて、リンカが未使用コードのブロックを捨てることを許可します。

あなたはストレートです。あなたができる唯一のことは普通です:(リンクされた後にstripコマンドを実行して)実行ファイルを取り除き、-Osを使ってサイズを最適化するコードをコンパイルします。

g++ -c -Os -ffunction-sections -fdata-sections some_file.cpp -o some_file.o 
g++ -c -Os -ffunction-sections -fdata-sections main.cpp -o main.o 
g++ -Wl,--gc-sections main.o some_file.p -o my_executable 
+0

私は行ったことがない:これらのオプションは(この回答の目的のために、Cygwinのプラットフォームを含む)は、Windows上では動作しません念頭に置い


が、これはあなたがこれを行うことができますどのように一般的ですこれらの操作は以前のものです。詳細や例を教えていただけますか? - – Hybridslinky

関連する問題