如何在cmake中进行glibc的静态链接

10
我正在尝试从Fedora构建一个软件包,以便在RedHat 6机器上运行。因此我需要构建并静态链接一些在RedHat机器中不存在的库。
我发现我可以使用-static-libgcc-static-libstdc++与标准库的静态版本进行链接,但我不知道如何处理glibc
如何使用CMake链接到glibc的静态库?
1个回答

12

我知道问题提到了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 的软件包”的使用场景。


2
这并没有回答问题,是吗?问题是关于静态链接glibc的,而答案解释了如何静态链接libgcc和libstdc++... - JonasVautherin
1
我的答案现在已经做出来了。 - Cinder Biscuits
1
感谢您的编辑:)。关于glibc不是设计为静态链接的好观点!最后,我想提到musl,这可能是根据用例可行的替代方案。 - JonasVautherin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接