Ouais c'est la confusion entre Dynamic Linking et Dynamic Loading, là tu mélanges.
On va prendre ce cas:
App <- Lib1 <- Lib2
Donc Lib2 est standalone, Lib1 dépend de Lib2 et App dépend de Lib1.
Dans ce cas tu peux dlopen Lib1 dans App (dynamic loading) mais Lib1 doit (a priori) être linkée avec Lib2 (dynamic linking).
Dans les deux cas c'est de la résolution de symbole au runtime mais les modalités sont un peu différente, en gros Dynamic Loading c'est le faire "manuellement".
T'as un exemple complet là
https://dwheeler.com/program-library...OWTO/x172.html
(ou ici:
https://tldp.org/HOWTO/html_single/C++-dlopen/)
Donc là on voit bien que la librairie n'est pas linkée à la compilation, mais loadée au runtime "manuellement", et très certainement que la lib dépend d'autres lib, a priori via du dynamic linking.
---
Ensuite chainer du dynamic loading, c'est autre chose, a priori ça marche mais bon faudra bien loader les dépendances dans l'ordre etc.
Important de noter que le Dynamic Loading en "temps normal" n'est quasiment jamais nécessaire, si tu dynamic link, tu peux hotswap tes librairies, pas durant le runtime mais tu peux juste stopper l'appli, hotswap la lib, et relancer.
Le seul avantage du Dynamic Loading c'est la possibilité de hotswap durant le runtime, qui très honnêtement est un cas auquel il est très difficile de trouver un intérêt, tu gagnes extrêmement peu à faire ça, voire rien. Et charger des comportements dynamiques au runtime ça s'appelle...: programmer une application!
Donc je te conseille de toujours rester sur du Dynamic Linking, c'est bien plus solide.