使用docker环境编译

  1. 使用alpine镜像,alpine系统包含各个系统架构的镜像,alpine使用的是musl libc

    alpine - Official Image | Docker Hub

    image-20231124152014516

    docker run可以通过--platform=linux/amd64指定镜像的架构(前提是镜像需要支持)
    也可以通过Dockerfile中的 FROM 加入 --platform=linux/amd64,例如 FROM --platform=linux/amd64 alpine:edge

  2. 使用muslcc

    musl中有各个平台的编译环境

    muslcc/x86_64 Tags | Docker Hub

    image-20231124152237595

  3. 如果要使用gnu glibc,建议使用ubuntu编译,ubuntu也支持各个架构

    ubuntu - Official Image | Docker Hub

    image-20231124162453309

Docker环境参考:gcc docker 编译环境

cmake gcc静态链接运行时

cmake_minimum_required(VERSION 3.0)
project(myproject)

add_executable(myexe main.cpp)

target_include_directories(myexe PRIVATE include)
target_compile_features(myexe PUBLIC cxx_std_11)
target_link_libraries(myexe PRIVATE -static-libgcc -static-libstdc++ -static)

在这个示例中,-static-libgcc-static-libstdc++选项用于将GCC和C++运行时库静态链接,-static选项用于指定静态链接方式。这样,在编译可执行文件时,就会将运行时库静态链接到可执行文件中,从而避免在目标环境中需要安装运行时库的问题。

target_link_libraries(${PROJECT_NAME} PUBLIC -static-libgcc -static-libstdc++ -static)