我有一个由用 C++ 编写的不同模块组成的应用程序。
其中一个模块用于处理 SunGrid Engine 上的分布式任务。它使用 DRMAA API 来提交和监控网格作业。如果客户端不支持网格,则应使用本地计算机
API libdrmaa.so 的共享对象在编译时链接并在运行时加载。
如果使用我的应用程序的客户端有这个“.so”一切都很好,但如果客户端没有那个,应用程序退出加载共享库失败。
为了避免这种情况,我将 API 调用替换为使用 dlsym() 和 dlopen() 获得的函数指针。现在,如果对 dlopen 的调用没有成功并且我的目标已经实现,我可以使用本地计算机而不是网格。
现在的问题是应用程序现在可以成功运行小型测试用例,但是对于较大的测试用例,它会引发分段错误,而使用动态加载的相同代码可以正常工作。
使用 dlsym() 和 dlopen() 时我是否遗漏了什么?
有没有其他方法可以实现相同的目标?
任何帮助,将不胜感激。
谢谢,