2012-12-07 69 views
0

我知道我可以使用dlopen在C/C++中打开共享库。
我可以使用dlopen调用的结果来确定是否存在功能。动态加载共享可选对象

但是,我需要加载一个现有的库,许多功能。

是否有替代方案重新定义所有这些函数的函数指针版本的长列表并为它们分配每个函数dlsym?

回答

3

一个可能的解决方案是重新思考一点点。

共享的可选库可能非常大,但如果它是可选的,那么您正在编写的与其接口的代码当然也是可选的?

要减少dlsym()赋值的数量,您可以编写自己的动态库,它与实现仅OPTIONAL组件的可选库链接。

然后,您只需从应用程序的非可选部分动态加载和分配应用程序的可选组件。

这可能,如果你的可选库是一个C库和可选组件是C++对象,但你有它的东西过度复杂...

+0

其实,这不是一个坏主意。我会试一试。 – Matt

+0

这实际上是一个好主意。我最终将使用共享库功能的api(称为optional.so)移动到单独的共享库中 - 将其称为myapi.so。在启动时,我尝试加载optional.so,如果它成功加载myapi.so。这使得可选部件可用。 – Matt

+0

其实,我只是尝试加载链接到optional.so的myapi.so。当我将dlopen调用到myapi.so时,它会自动加载optional.so。因此,成功加载myapi.so意味着可选.so也在那里。 – Matt