我有一个链接到两个共享库的可执行文件,每个共享库都依赖于系统共享库.(在这种情况下,这些是OpenCL和CUDA运行时库,但这不会影响问题)
+--> libA.so ---> libOpenCL.so (on system) Exe -| +--> libB.so ---> libcudart.so (on system)
Exe
连同libA.so
和libB.so
被分发给用户.用户可能没有libOpenCL.so
和/或libcudart.so
安装在他们的系统上.
目标是Exe
应该能够反正启动,并在运行时检测例如libA.so
由于不满足其依赖性而无法加载.
一种可能性是使其libA.so
在运行时使用dlopen()
,在它检测加载是否失败的情况下加载.
是否也可以正常连接libA.so
到Exe
,但在某种程度上Exe
还是可以开启如果libA.so
无法加载?这在Linux和/或Windows平台上是否可行?
如果你想这样做,你需要dlopen
.在程序加载时,除了执行失败之外,没有用于错误报告的向量,也没有任何合理的选择,如果它们缺少定义,那么在缺失的库中找到的符号将被解析为什么.