C++ プログラムをコンパイルしましたが、私のコンピューターでは問題なく動作していますが、友人がそのプログラムを起動しようとすると、プログラムlibgcc_s_sw2-1.dll
が見つからないと表示されます。CMake を使用して、必要なすべての GCC ランタイム ライブラリをプログラムに含めるにはどうすればよいですか?
4434 次
2 に答える
8
rubenvb が正しく答えると、libgcc が必要になるかCMAKE_EXE_LINKER_FLAGS=-static
、CMakeLists.txt に追加する必要があります。
別の方法として、MinGW インストールで libgcc_s_sw2-1.dll を見つけ、InstallRequiredSystemLibrariesを使用してインストールに「パッケージ化」することもできます。これはCPackともうまく統合されます。
たとえば、自分のコードには次のものがあります。
if( MINGW )
message( STATUS " Installing system-libraries: MinGW DLLs." )
get_filename_component( Mingw_Path ${CMAKE_CXX_COMPILER} PATH )
set( CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ${Mingw_Path}/mingwm10.dll ${Mingw_Path}/libgcc_s_dw2-1.dll ${Mingw_Path}/libstdc++-6.dll )
endif( MINGW )
include( InstallRequiredSystemLibraries )
後で、インストールまたはパッケージを準備する部分で:
# Actually install it when make install is called.
# Note, this works with CPack
if( CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS )
install( PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION bin COMPONENT System )
endif( CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS )
于 2012-10-21T13:36:00.140 に答える
4
libgcc dll は、GCC でコンパイルされたすべてのプログラムに必要です。この DLL をプログラムで再配布したくない場合は-static
、リンカーに渡すか、CMake で静的にリンクする必要があります。
CMAKE_EXE_LINKER_FLAGS=-static
これは GCC に固有のものです。
于 2012-10-21T09:51:29.167 に答える