我已经编译了一个 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
所有使用 GCC 编译的程序都需要 libgcc dll。如果您不想在程序中重新分发此 DLL,则必须通过传递-static
给链接器或在 CMake 中静态链接:
CMAKE_EXE_LINKER_FLAGS=-static
这是特定于 GCC 的。
于 2012-10-21T09:51:29.167 回答