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

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

CMAKE_EXE_LINKER_FLAGS=-static

这是特定于 GCC 的。

于 2012-10-21T09:51:29.167 回答