如何使用CMake安装GCC运行时库?

时间:2012-10-21 05:10:49

标签: gcc cmake mingw

我已经编译了一个C ++程序,它在我的计算机上完美运行,但如果我的朋友试图启动该程序,它会说libgcc_s_sw2-1.dll丢失了。如何使用CMake将所有必需的GCC运行时库包含在程序中?

2 个答案:

答案 0 :(得分:5)

正如rubenvb正确回答:libgcc是必需的,或者你应该将CMAKE_EXE_LINKER_FLAGS=-static添加到你的CMakeLists.txt。

作为替代方案,您可以尝试在MinGW安装中找到libgcc_s_sw2-1.dll,并使用InstallRequiredSystemLibraries将其与您的安装“打包”。这也很好地与CPack集成。

E.g。在我自己的代码中,我有:

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 )

答案 1 :(得分:4)

使用GCC编译的所有程序都需要libgcc dll。如果您不想在程序中重新发布此DLL,则必须通过将-static传递给链接器或在CMake中静态链接:

CMAKE_EXE_LINKER_FLAGS=-static

这是GCC特有的。