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 (ударение не в оригинал)