我正在尝试从Fedora构建一个可以在RedHat 6机器上运行的软件包。所以我需要与一些 RedHat 机器中不存在的库构建和静态链接。
我发现我可以-static-libgcc
或-static-libstdc++
链接到标准库的静态版本,但我不知道如何处理glibc
。
如何使用 CMake 链接到静态glibc
库?
我知道这个问题提到了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
来轻松工作。