仅在满足依赖性时才加载共享库

tml*_*len 6 c linux windows linker dynamic-linking

我有一个链接到两个共享库的可执行文件,每个共享库都依赖于系统共享库.(在这种情况下,这些是OpenCL和CUDA运行时库,但这不会影响问题)

     +--> libA.so  --->  libOpenCL.so (on system)
Exe -|
     +--> libB.so  --->  libcudart.so (on system)
Run Code Online (Sandbox Code Playgroud)

Exe连同libA.solibB.so被分发给用户.用户可能没有libOpenCL.so和/或libcudart.so安装在他们的系统上.

目标是Exe应该能够反正启动,并在运行时检测例如libA.so由于不满足其依赖性而无法加载.

一种可能性是使其libA.so在运行时使用dlopen(),在它检测加载是否失败的情况下加载.

是否也可以正常连接libA.soExe,但在某种程度上Exe还是可以开启如果libA.so无法加载?这在Linux和/或Windows平台上是否可行?

R..*_*R.. 5

如果你想这样做,你需要dlopen.在程序加载时,除了执行失败之外,没有用于错误报告的向量,也没有任何合理的选择,如果它们缺少定义,那么在缺失的库中找到的符号将被解析为什么.