Let's say I have a shared lib, A
, and something else that links against it, B
. They are in two separate projects.
In my current setup, for A
's functionality to be able to work properly, B
needs to add -rdynamic
to its linker options, like this:
target_link_libraries(B -rdynamic)
The thing is that there may be many, many dependants of A
, so having to explicitly include the line above for each of them is a hassle.
Is there a way for A
to have all its dependants automatically use -rdynamic
?
Edit: here's a more detailed explanation of my situation.
I have a shared library, mylib
. It cannot be a static library. It is defined in a CMake project of the same name.
mylib
├── CMakeLists.txt
└── src
└── ...
Its CMakeLists.txt
looks like this:
# mylib/CMakeLists.txt
project(mylib)
...
add_library(mylib SHARED ${SOURCES})
...
In separate projects, there are executables, client_i
, that use/link against mylib
, sometimes indirectly (i.e. link against something that links against mylib
).
client_0
├── CMakeLists.txt
└── src
└── ...
client_1
├── CMakeLists.txt
└── src
└── ...
client_2
├── CMakeLists.txt
└── src
└── ...
...
One of those CMakeLists.txt
looks like:
# client_i/CMakeLists.txt
project(client_i)
...
add_executable(client_i ${SOME_OTHER_SOURCES})
target_link_libraries(client_i mylib -rdynamic)
...
Notice the -rdynamic
. Without this option, some functionality provided by mylib
doesn't work. I need it.
My problem is that there may be thousands of different client_i
s, each defined in its own project by different people/users of mylib
, which I provide (and may be used as a binary).
I'd like to avoid having to add -rdynamic
to each of the client_i
s, since some users might not know about it (since it may be used indirectly), some might forget about it, it might lead to headaches, etc.
Ideally, the CMakeLists.txt
for mylib
would look like:
# mylib/CMakeLists.txt
project(mylib)
...
add_library(mylib SHARED ${SOURCES})
target_link_libraries(mylib -rdynamic)
...
And a client_i
CMakeLists.txt
would simply be:
# client_i/CMakeLists.txt
project(client_i)
...
add_executable(client_i ${SOME_OTHER_SOURCES})
target_link_libraries(client_i mylib)
...
And it would have -rdynamic
in its linker options. But I have tried this and it does not seem to work.