问题
Problem:
I am having difficulties linking glibcc/glibc++ into a shared library using CMake and GCC4.9 on my Ubuntu 16.04 installation.
Additional conditions:
Loading the shared library gives a problem om the Red Hat production environment(where I copy it to), I believe because it uses a different libstc++ version(error: GLIBCXX_3_4_20 not found). I do not have sudo rights and cannot upgrade the machine.
As I derived from this blog, this post, I tried linking static linking against libgcc and libgc++ using:
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
and againg using
set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
But that doesn't work. What does work is this CMake script:
add_library(myLib SHARED ${SOURCE_FILES})
set(CMAKE_EXE_LINKER_FLAGS " -static")
target_link_libraries(myLib -static-libgcc -static-libstdc++)
This must be the wrong way of doing this, to my knowledge -static-libgcc and -static-libstdc++ are linker options and not libraries...
Question: How do I link statically against -libgcc and -libstdc++ correctly?
Thanks in advance!
回答1:
Yes, target_link_libraries
is a correct way to set linker flags or linker options.
Documentation of target_link_libraries
:
Specify libraries or flags to use when linking a given target.
Item names starting with -, but not -l or -framework, are treated as linker flags.
https://cmake.org/cmake/help/v3.0/command/target_link_libraries.html (emphasis not in original)
来源:https://stackoverflow.com/questions/38694058/cmake-linking-statically-against-libgcc-and-libstdc-into-a-shared-library