CMake: привязка статически к libgcc и libstdС++ в общую библиотеку

Проблема:

У меня возникают трудности при связывании glibcc/glibc++ в общую библиотеку с использованием CMake и GCC4.9 на моей установке Ubuntu 16.04.

Дополнительные условия:

Загрузка общей библиотеки создает проблему в производственной среде Red Hat (куда я ее копирую), я полагаю, потому что она использует другую версию libstc++ (ошибка: GLIBCXX_3_4_20 не найдена). У меня нет прав sudo и я не могу обновить машину.

Как я понял из этого блога, в этом посте я попытался связать статические ссылки с libgcc и libgc++, используя:

set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")

и снова используя

set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")

Но это не работает. Что работает этот скрипт CMake:

add_library(myLib SHARED ${SOURCE_FILES})
set(CMAKE_EXE_LINKER_FLAGS " -static")
target_link_libraries(myLib -static-libgcc -static-libstdc++)

Должно быть, это неправильный способ сделать это, насколько мне известно, -static -libgcc и -static-libstdС++ являются опциями компоновщика, а не библиотеками...

Вопрос: Как правильно связать статически с -libgcc и -libstdС++?

Заранее спасибо!

Ответ 1

Да, target_link_libraries - это правильный способ установки флагов компоновщика или опций компоновщика.

Документация target_link_libraries:

Укажите библиотеки или флаги для использования при связывании заданной цели.

Имена товаров, начинающиеся с -, но не -l или -framework, рассматриваются как флаги компоновщика.

https://cmake.org/cmake/help/v3.0/command/target_link_libraries.html (акцент не на оригинале)