【问题标题】:How to static linking to glibc in cmake如何在cmake中静态链接到glibc
【发布时间】:2018-03-30 06:37:33
【问题描述】:

我正在尝试从 Fedora 构建一个可以在 RedHat 6 机器上运行的包。所以我需要用一些 RedHat 机器中不存在的库来构建和静态链接。 我发现我可以通过-static-libgcc-static-libstdc++ 链接标准库的静态版本,但我不知道如何处理glibc。如何使用 CMake 链接到 glibc 的静态库?

对不起,我的英语不好。

【问题讨论】:

    标签: cmake static-linking software-packaging


    【解决方案1】:

    我知道问题提到了glibc,但对于 C++,由于 -static-libgcc-static-libstdc++ 是链接器选项,因此在 CMake 中设置它们的正确方法是使用 target_link_libraries()

    所以你可以这样设置,其中 MyLibrary 是你的项目的名称:

    target_link_libraries(MyLibrary -static-libgcc -static-libstdc++)
    

    鉴于此,如果您想要 glibc 的完整静态链接,您同样需要传递 -static 标志。

    target_link_libraries(MyLibrary -static)
    

    如果您想要更多的全局设置:

    set(BUILD_SHARED_LIBS OFF)
    set(CMAKE_EXE_LINKER_FLAGS "-static")
    

    但是,请记住,glibc 不是为静态链接而设计的,如果没有大量的额外工作,您将不会得到一个真正的静态包。通过静态链接glibc,您构建“可以在 RedHat 6 机器上运行的 Fedora 软件包”的用例将无法轻松工作。

    【讨论】:

    • 这不能回答问题,是吗?问题是关于静态链接 glibc,答案解释了如何静态链接 libgcc 和 libstdc++...
    • 我现在的答案是。
    • 感谢您的编辑 :)。关于 glibc 也不是被设计为静态链接的好点!最后我想提一下 musl 可能是一个可行的替代方案,具体取决于用例
    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2015-07-20
    • 2020-08-09
    相关资源
    最近更新 更多