假设我有一个共享库,A
和其他链接它的东西,B
. 他们在两个独立的项目中。
在我当前的设置中,为了A
能够正常工作的功能,B
需要添加-rdynamic
到其链接器选项中,如下所示:
target_link_libraries(B -rdynamic)
问题是 可能有很多很多的依赖项A
,因此必须为它们中的每一个显式包含上面的行是一件麻烦事。
有没有办法A
让它所有的家属自动使用-rdynamic
?
编辑:这里是我的情况的更详细的解释。
我有一个共享库,mylib
. 它不能是静态库。它在同名的 CMake 项目中定义。
mylib
├── CMakeLists.txt
└── src
└── ...
它CMakeLists.txt
看起来像这样:
# mylib/CMakeLists.txt
project(mylib)
...
add_library(mylib SHARED ${SOURCES})
...
在单独的项目中,有可执行文件 ,client_i
使用/链接到mylib
,有时是间接的(即链接到链接到的东西mylib
)。
client_0
├── CMakeLists.txt
└── src
└── ...
client_1
├── CMakeLists.txt
└── src
└── ...
client_2
├── CMakeLists.txt
└── src
└── ...
...
其中之一CMakeLists.txt
看起来像:
# client_i/CMakeLists.txt
project(client_i)
...
add_executable(client_i ${SOME_OTHER_SOURCES})
target_link_libraries(client_i mylib -rdynamic)
...
注意-rdynamic
. 如果没有此选项,则由 提供的某些功能mylib
不起作用。我需要它。
我的问题是可能有成千上万个不同client_i
的 s,每个都由我提供的不同人/用户在自己的项目中定义mylib
(并且可以用作二进制文件)。
我想避免必须添加-rdynamic
到每个client_i
s,因为有些用户可能不知道它(因为它可能被间接使用),有些人可能会忘记它,它可能会导致头痛等。
理想情况下,CMakeLists.txt
formylib
看起来像:
# mylib/CMakeLists.txt
project(mylib)
...
add_library(mylib SHARED ${SOURCES})
target_link_libraries(mylib -rdynamic)
...
aclient_i
CMakeLists.txt
只是:
# client_i/CMakeLists.txt
project(client_i)
...
add_executable(client_i ${SOME_OTHER_SOURCES})
target_link_libraries(client_i mylib)
...
它会-rdynamic
在它的链接器选项中。但是我已经尝试过了,它似乎不起作用。