使用cmake与mingw-w64交叉编译时,如何最好地处理libstdc ++ dll和libstdc dll?

时间:2014-10-24 14:41:42

标签: c++ cmake mingw cross-compiling mingw-w64

我使用chw-w64(真正使用MXE项目)从Linux交叉编译C ++(和某些C)项目,使用cmake作为构建系统。我已经意识到我需要提供dll libstdc ++和libstdc以及生成的库和exe文件,或者静态链接到这些库。

我的问题是:

  1. 哪个选项更可取,静态链接或提供文件?我个人更喜欢静态链接的想法,因为在我的情况下,最终用户更简单。

  2. 如果我愿意(或者创建它们的步骤),我在哪里可以找到所需的dll供应它们。我只能在我的工具链中找到.a版本。

  3. 如何指示cmake静态链接库,请记住这只是交叉编译所需要的。作为入门者,请参阅下面MXE提供的工具链文件,这是我目前正在使用的工具。我可能不想修改它,而是修改CMakeLists.txt文件,或者通过我的发布脚本的命令行cmake选项。

  4. 工具链文件

    set(CMAKE_SYSTEM_NAME Windows)
    set(MSYS 1)
    set(BUILD_SHARED_LIBS OFF)
    set(CMAKE_BUILD_TYPE Release)
    set(CMAKE_FIND_ROOT_PATH /opt/mxe/usr/x86_64-w64-mingw32)
    set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
    set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
    set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    set(CMAKE_C_COMPILER /opt/mxe/usr/bin/x86_64-w64-mingw32-gcc)
    set(CMAKE_CXX_COMPILER /opt/mxe/usr/bin/x86_64-w64-mingw32-g++)
    set(CMAKE_Fortran_COMPILER /opt/mxe/usr/bin/x86_64-w64-mingw32-gfortran)
    set(CMAKE_RC_COMPILER /opt/mxe/usr/bin/x86_64-w64-mingw32-windres)
    set(HDF5_C_COMPILER_EXECUTABLE /opt/mxe/usr/bin/x86_64-w64-mingw32-h5cc)
    set(HDF5_CXX_COMPILER_EXECUTABLE /opt/mxe/usr/bin/x86_64-w64-mingw32-h5c++)
    set(PKG_CONFIG_EXECUTABLE /opt/mxe/usr/bin/x86_64-w64-mingw32-pkg-config)
    set(QT_QMAKE_EXECUTABLE /opt/mxe/usr/x86_64-w64-mingw32/qt/bin/qmake)
    set(CMAKE_INSTALL_PREFIX /opt/mxe/usr/x86_64-w64-mingw32 CACHE PATH "Installation Prefix")
    set(CMAKE_BUILD_TYPE Release CACHE STRING "Debug|Release|RelWithDebInfo|MinSizeRel")
    

    顺便说一句,我已经尝试过以下cmake调用,但这对二进制大小没有影响,所以我认为它没有用。实际测试这个的提示是受欢迎的,我确实安装了葡萄酒。

    cmake -DCMAKE_BUILD_TYPE=Release \
          -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} "-static -static-libgcc -static-libstdc++"" \
          -DCMAKE_TOOLCHAIN_FILE=/opt/mxe/usr/x86_64-w64-mingw32/share/cmake/mxe-conf.cmake $WORKING_COPY_DIR/release/xfemm_mingw_win64/cfemm
    

0 个答案:

没有答案