Как сделать статическую ссылку на glibc в cmake

Я пытаюсь собрать пакет из Fedora, который может работать на компьютере с RedHat 6. Поэтому мне нужно создать статическую ссылку с некоторой библиотекой, которой нет на машине RedHat. Я обнаружил, что могу -static-libgcc или -static-libstdc++ связать со статической версией стандартной библиотеки, но не знаю, что делать с glibc. Как связать статическую библиотеку glibc с CMake?

Извините за мой плохой английский.


person Phạm Văn Thông    schedule 18.10.2017    source источник


Ответы (1)


Я знаю, что в вопросе упоминается glibc, но для С++, поскольку -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 не предназначен для статической компоновки, и без большой дополнительной работы вы не получите действительно статический пакет. Ваш вариант использования для создания пакета из Fedora, который может работать на машине с RedHat 6, не будет легко работать при статической компоновке glibc.

person Cinder Biscuits    schedule 18.10.2017
comment
Это не отвечает на вопрос, не так ли? Вопрос касается статического связывания glibc, и ответ объясняет, как статически связать libgcc и libstdС++... - person JonasVautherin; 14.05.2020
comment
Мой ответ делает сейчас. - person Cinder Biscuits; 18.05.2021
comment
Спасибо за редактирование :). Хорошая мысль о том, что glibc не предназначена для статической компоновки! Наконец, я хотел бы упомянуть musl, который может быть жизнеспособной альтернативой в зависимости от варианта использования. - person JonasVautherin; 19.05.2021