我正在尝试从 Fedora 构建一个可以在 RedHat 6 机器上运行的包。所以我需要用一些 RedHat 机器中不存在的库来构建和静态链接。我发现我可以给你-static-libgcc
或-static-libstdc++
链接标准库的静态版本,但我不知道如何处理glibc
. 如何glibc
使用 CMake 链接到静态库?
对不起,我的英语不好。
我正在尝试从 Fedora 构建一个可以在 RedHat 6 机器上运行的包。所以我需要用一些 RedHat 机器中不存在的库来构建和静态链接。我发现我可以给你-static-libgcc
或-static-libstdc++
链接标准库的静态版本,但我不知道如何处理glibc
. 如何glibc
使用 CMake 链接到静态库?
对不起,我的英语不好。
我知道提到的问题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
它不是为静态链接而设计的,如果没有大量的额外工作,您将不会得到一个真正的静态包。您构建“可以在 RedHat 6 机器上运行的 Fedora 软件包”的用例不会通过静态链接轻松工作glibc
。