CMake: статическая связь с libgcc и libstdc++ в общую библиотеку

:

у меня проблемы с связыванием 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")

и againg с помощью

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

но это не сработает. Что?!--24-->тут работа это сценарий CMake:

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

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

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

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

1 ответов


да target_link_libraries Это правильный способ установки флагов компоновщика или компоновщика.

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

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

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

https://cmake.org/cmake/help/v3.0/command/target_link_libraries.html (ударение не в оригинал)