5

C++ プログラムをコンパイルしましたが、私のコンピューターでは問題なく動作していますが、友人がそのプログラムを起動しようとすると、プログラムlibgcc_s_sw2-1.dllが見つからないと表示されます。CMake を使用して、必要なすべての GCC ランタイム ライブラリをプログラムに含めるにはどうすればよいですか?

4

2 に答える 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 に答える